From 6f1cb317af8890d1a87804bf7fa04497d53b7af4 Mon Sep 17 00:00:00 2001
From: iamyajat <68477362+iamyajat@users.noreply.github.com>
Date: Tue, 8 Nov 2022 20:49:54 +0530
Subject: [PATCH 1/2] feat: community page created
---
.idea/gradle.xml | 1 -
.idea/misc.xml | 4 +-
app/build.gradle | 28 ++--
app/src/main/AndroidManifest.xml | 11 +-
.../com/dscvit/vitty/activity/HomeActivity.kt | 28 ++++
.../vitty/activity/InstructionsActivity.kt | 4 +-
.../com/dscvit/vitty/adapter/DayAdapter.kt | 3 +-
.../com/dscvit/vitty/adapter/PeriodAdapter.kt | 39 ++++-
.../vitty/ui/community/CommunityFragment.kt | 37 +++++
.../vitty/ui/community/CommunityViewModel.kt | 6 +
.../ui/instructions/InstructionsFragment.kt | 24 +--
.../schedule/ScheduleFragment.kt} | 153 ++++++++++--------
.../vitty/ui/schedule/ScheduleViewModel.kt | 6 +
.../vitty/ui/settings/AccountPreference.kt | 10 +-
.../com/dscvit/vitty/util/UtilFunctions.kt | 14 ++
.../main/res/drawable/ic_community_filled.xml | 23 +++
.../res/drawable/ic_community_outline.xml | 19 +++
.../res/drawable/ic_community_selector.xml | 5 +
.../main/res/drawable/ic_timetable_filled.xml | 10 ++
.../res/drawable/ic_timetable_outline.xml | 10 ++
.../res/drawable/ic_timetable_selector.xml | 5 +
app/src/main/res/layout/activity_home.xml | 37 +++++
.../main/res/layout/fragment_community.xml | 39 +++++
app/src/main/res/layout/fragment_day.xml | 1 +
...ity_schedule.xml => fragment_schedule.xml} | 9 +-
app/src/main/res/layout/item_period.xml | 2 +-
app/src/main/res/menu/bottom_nav_menu.xml | 14 ++
.../main/res/navigation/mobile_navigation.xml | 18 +++
app/src/main/res/values/strings.xml | 4 +-
app/src/main/res/values/themes.xml | 2 +-
build.gradle | 2 +-
gradle/wrapper/gradle-wrapper.properties | 2 +-
32 files changed, 441 insertions(+), 129 deletions(-)
create mode 100644 app/src/main/java/com/dscvit/vitty/activity/HomeActivity.kt
create mode 100644 app/src/main/java/com/dscvit/vitty/ui/community/CommunityFragment.kt
create mode 100644 app/src/main/java/com/dscvit/vitty/ui/community/CommunityViewModel.kt
rename app/src/main/java/com/dscvit/vitty/{activity/ScheduleActivity.kt => ui/schedule/ScheduleFragment.kt} (67%)
mode change 100755 => 100644
create mode 100644 app/src/main/java/com/dscvit/vitty/ui/schedule/ScheduleViewModel.kt
create mode 100644 app/src/main/res/drawable/ic_community_filled.xml
create mode 100644 app/src/main/res/drawable/ic_community_outline.xml
create mode 100644 app/src/main/res/drawable/ic_community_selector.xml
create mode 100644 app/src/main/res/drawable/ic_timetable_filled.xml
create mode 100644 app/src/main/res/drawable/ic_timetable_outline.xml
create mode 100644 app/src/main/res/drawable/ic_timetable_selector.xml
create mode 100644 app/src/main/res/layout/activity_home.xml
create mode 100644 app/src/main/res/layout/fragment_community.xml
rename app/src/main/res/layout/{activity_schedule.xml => fragment_schedule.xml} (94%)
mode change 100755 => 100644
create mode 100644 app/src/main/res/menu/bottom_nav_menu.xml
create mode 100644 app/src/main/res/navigation/mobile_navigation.xml
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index e9969a1..7b46144 100755
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -14,7 +14,6 @@
-
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 655019c..6d6971a 100755
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -8,7 +8,9 @@
-
+
+
+
diff --git a/app/build.gradle b/app/build.gradle
index 9744a2d..7a5acc9 100755
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,15 +20,15 @@ android {
storePassword keystoreProperties['storePassword']
}
}
- compileSdkVersion 31
+ compileSdkVersion 33
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.dscvit.vitty"
minSdkVersion 24
- targetSdkVersion 31
- versionCode 32
- versionName "1.4.0"
+ targetSdkVersion 33
+ versionCode 34
+ versionName "2.0.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
signingConfig signingConfigs.release
}
@@ -55,14 +55,16 @@ android {
dependencies {
// Android Stuff
- implementation 'androidx.core:core-ktx:1.7.0'
- implementation 'androidx.appcompat:appcompat:1.4.0'
- implementation 'com.google.android.material:material:1.4.0'
- implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
+ implementation 'androidx.core:core-ktx:1.8.0'
+ implementation 'androidx.appcompat:appcompat:1.4.2'
+ implementation 'com.google.android.material:material:1.6.1'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
- implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.0'
- implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0'
- implementation 'androidx.preference:preference-ktx:1.1.1'
+ implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.0'
+ implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.0'
+ implementation 'androidx.preference:preference-ktx:1.2.0'
+ implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3'
+ implementation 'androidx.navigation:navigation-ui-ktx:2.5.3'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
@@ -76,10 +78,10 @@ dependencies {
implementation 'com.google.android.gms:play-services-auth:19.2.0'
// Firestore
- implementation 'com.google.firebase:firebase-firestore:24.0.0'
+ implementation 'com.google.firebase:firebase-firestore:24.2.0'
// FCM
- implementation 'com.google.firebase:firebase-messaging:23.0.0'
+ implementation 'com.google.firebase:firebase-messaging:23.0.6'
// Remote Config
implementation 'com.google.firebase:firebase-config-ktx'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 02e7ed9..a01a9fc 100755
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -80,22 +80,17 @@
android:resource="@xml/next_class_widget_info" />
-
+
+ android:exported="true">
-
+
, private val d
val periodTime = binding.periodTime
val classNav = binding.classNav
val classIdOnline = binding.classIdOnline
-// val courseCode = binding.courseCode
+
+ // val courseCode = binding.courseCode
fun bind(data: PeriodDetails) {
binding.periodDetails = data
}
@@ -85,8 +87,19 @@ class PeriodAdapter(private val dataSet: ArrayList, private val d
holder.apply {
periodTime.text = "$sTime - $eTime"
activePeriod.visibility = View.INVISIBLE
- classNav.setOnClickListener {
- VITMap.openClassMap(classNav.context, item.roomNo)
+ classNav.apply {
+ setOnClickListener {
+ VITMap.openClassMap(classNav.context, item.roomNo)
+ }
+ setOnLongClickListener {
+ copyItem(
+ context,
+ "Room Number",
+ "ROOM_NUMBER_ITEM",
+ item.roomNo
+ )
+ true
+ }
}
}
@@ -115,12 +128,22 @@ class PeriodAdapter(private val dataSet: ArrayList, private val d
if (isExpanded) previousExpandedPosition = position
- holder.itemView.setOnClickListener {
- vibrateOnClick(holder.itemView.context)
- mExpandedPosition = if (isExpanded) -1 else position
- notifyItemChanged(previousExpandedPosition)
- notifyItemChanged(position)
+ holder.itemView.apply {
+ setOnClickListener {
+ vibrateOnClick(holder.itemView.context)
+ mExpandedPosition = if (isExpanded) -1 else position
+ notifyItemChanged(previousExpandedPosition)
+ notifyItemChanged(position)
+ }
+ setOnLongClickListener {
+ mExpandedPosition = position
+ notifyItemChanged(previousExpandedPosition)
+ notifyItemChanged(position)
+ true
+ }
}
+
+
}
override fun getItemCount() = dataSet.size
diff --git a/app/src/main/java/com/dscvit/vitty/ui/community/CommunityFragment.kt b/app/src/main/java/com/dscvit/vitty/ui/community/CommunityFragment.kt
new file mode 100644
index 0000000..ffd4a82
--- /dev/null
+++ b/app/src/main/java/com/dscvit/vitty/ui/community/CommunityFragment.kt
@@ -0,0 +1,37 @@
+package com.dscvit.vitty.ui.community
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
+import com.dscvit.vitty.databinding.FragmentCommunityBinding
+
+class CommunityFragment : Fragment() {
+
+ private var _binding: FragmentCommunityBinding? = null
+
+ // This property is only valid between onCreateView and
+ // onDestroyView.
+ private val binding get() = _binding!!
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ val communityViewModel =
+ ViewModelProvider(this)[CommunityViewModel::class.java]
+
+ _binding = FragmentCommunityBinding.inflate(inflater, container, false)
+ val root: View = binding.root
+
+ return root
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ _binding = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dscvit/vitty/ui/community/CommunityViewModel.kt b/app/src/main/java/com/dscvit/vitty/ui/community/CommunityViewModel.kt
new file mode 100644
index 0000000..bdbcb19
--- /dev/null
+++ b/app/src/main/java/com/dscvit/vitty/ui/community/CommunityViewModel.kt
@@ -0,0 +1,6 @@
+package com.dscvit.vitty.ui.community
+
+import androidx.lifecycle.ViewModel
+
+class CommunityViewModel : ViewModel() {
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dscvit/vitty/ui/instructions/InstructionsFragment.kt b/app/src/main/java/com/dscvit/vitty/ui/instructions/InstructionsFragment.kt
index c1caabb..7f76bae 100755
--- a/app/src/main/java/com/dscvit/vitty/ui/instructions/InstructionsFragment.kt
+++ b/app/src/main/java/com/dscvit/vitty/ui/instructions/InstructionsFragment.kt
@@ -1,14 +1,11 @@
package com.dscvit.vitty.ui.instructions
-import android.content.ClipData
-import android.content.ClipboardManager
import android.content.Context
import android.content.SharedPreferences
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import android.widget.Toast
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import coil.load
@@ -16,6 +13,7 @@ import coil.transform.CircleCropTransformation
import com.dscvit.vitty.R
import com.dscvit.vitty.databinding.FragmentInstructionsBinding
import com.dscvit.vitty.model.UserDetails
+import com.dscvit.vitty.util.UtilFunctions.copyItem
import com.dscvit.vitty.util.UtilFunctions.openLink
import com.google.firebase.auth.FirebaseUser
import com.google.firebase.auth.ktx.auth
@@ -59,7 +57,9 @@ class InstructionsFragment : Fragment() {
openLink(context, context.getString(R.string.instructions_1_link))
}
setOnLongClickListener {
- copyLink(
+ copyItem(
+ requireContext(),
+ "Link",
"GDSC_WEBSITE_LINK",
context.getString(R.string.instructions_1_link)
)
@@ -71,7 +71,9 @@ class InstructionsFragment : Fragment() {
openLink(context, context.getString(R.string.telegram_link))
}
setOnLongClickListener {
- copyLink(
+ copyItem(
+ requireContext(),
+ "Link",
"GDSC_TELEGRAM_LINK",
context.getString(R.string.telegram_link)
)
@@ -80,16 +82,4 @@ class InstructionsFragment : Fragment() {
}
}
}
-
- private fun copyLink(label: String, url: String) {
- Toast.makeText(
- context,
- "Link Copied",
- Toast.LENGTH_LONG
- ).show()
- val clipboard: ClipboardManager? =
- context?.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager?
- val clip = ClipData.newPlainText(label, url)
- clipboard?.setPrimaryClip(clip)
- }
}
diff --git a/app/src/main/java/com/dscvit/vitty/activity/ScheduleActivity.kt b/app/src/main/java/com/dscvit/vitty/ui/schedule/ScheduleFragment.kt
old mode 100755
new mode 100644
similarity index 67%
rename from app/src/main/java/com/dscvit/vitty/activity/ScheduleActivity.kt
rename to app/src/main/java/com/dscvit/vitty/ui/schedule/ScheduleFragment.kt
index b67705f..b8b1f4f
--- a/app/src/main/java/com/dscvit/vitty/activity/ScheduleActivity.kt
+++ b/app/src/main/java/com/dscvit/vitty/ui/schedule/ScheduleFragment.kt
@@ -1,4 +1,4 @@
-package com.dscvit.vitty.activity
+package com.dscvit.vitty.ui.schedule
import android.app.Activity
import android.app.PendingIntent
@@ -8,72 +8,71 @@ import android.os.Build
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
+import android.view.ViewGroup
import android.widget.Button
import android.widget.RelativeLayout
import android.widget.TextView
-import android.widget.Toast
import androidx.appcompat.content.res.AppCompatResources
import androidx.core.content.edit
-import androidx.databinding.DataBindingUtil
-import androidx.fragment.app.FragmentActivity
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
import com.dscvit.vitty.BuildConfig
import com.dscvit.vitty.R
+import com.dscvit.vitty.activity.InstructionsActivity
+import com.dscvit.vitty.activity.SettingsActivity
+import com.dscvit.vitty.activity.VITEventsActivity
import com.dscvit.vitty.adapter.DayAdapter
-import com.dscvit.vitty.databinding.ActivityScheduleBinding
+import com.dscvit.vitty.databinding.FragmentScheduleBinding
import com.dscvit.vitty.receiver.ShareReceiver
-import com.dscvit.vitty.util.Constants.EXAM_MODE
-import com.dscvit.vitty.util.Constants.FIRST_TIME_SETUP
-import com.dscvit.vitty.util.Constants.SHARE_INTENT
-import com.dscvit.vitty.util.Constants.TIMETABLE_AVAILABLE
-import com.dscvit.vitty.util.Constants.UPDATE
-import com.dscvit.vitty.util.Constants.UPDATE_CODE
-import com.dscvit.vitty.util.Constants.USER_INFO
+import com.dscvit.vitty.util.Constants
import com.dscvit.vitty.util.LogoutHelper
import com.dscvit.vitty.util.RemoteConfigUtils
-import com.dscvit.vitty.util.UtilFunctions.getBitmapFromView
-import com.dscvit.vitty.util.UtilFunctions.isUpdated
-import com.dscvit.vitty.util.UtilFunctions.openLink
-import com.dscvit.vitty.util.UtilFunctions.takeScreenshotAndShare
+import com.dscvit.vitty.util.UtilFunctions
import com.dscvit.vitty.util.VITMap
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.tabs.TabLayoutMediator
import com.google.firebase.firestore.FirebaseFirestore
import java.util.Calendar
-class ScheduleActivity : FragmentActivity() {
+class ScheduleFragment : Fragment() {
- private lateinit var binding: ActivityScheduleBinding
+ private var _binding: FragmentScheduleBinding? = null
private val days = listOf("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")
private lateinit var prefs: SharedPreferences
private var uid = ""
private val db = FirebaseFirestore.getInstance()
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- binding = DataBindingUtil.setContentView(this, R.layout.activity_schedule)
- prefs = getSharedPreferences(USER_INFO, 0)
+ // This property is only valid between onCreateView and
+ // onDestroyView.
+ private val binding get() = _binding!!
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ val scheduleViewModel =
+ ViewModelProvider(this)[ScheduleViewModel::class.java]
+
+ _binding = FragmentScheduleBinding.inflate(inflater, container, false)
+ val root: View = binding.root
+
+ prefs = requireContext().getSharedPreferences(Constants.USER_INFO, 0)
uid = prefs.getString("uid", "").toString()
val classLocation = prefs.getString("openClassId", "").toString()
if (classLocation != "") {
prefs.edit().putString("openClassId", "").apply()
- VITMap.openClassMap(this, classLocation)
+ VITMap.openClassMap(requireContext(), classLocation)
}
pageSetup()
firstTimeSetup()
- }
- override fun onStart() {
- super.onStart()
- setupOnStart()
+ return root
}
- override fun onResume() {
- super.onResume()
- checkExamMode()
- }
private fun checkExamMode() {
- if (!prefs.getBoolean(EXAM_MODE, false)) {
+ if (!prefs.getBoolean(Constants.EXAM_MODE, false)) {
binding.examModeAlert.apply {
visibility = View.INVISIBLE
layoutParams =
@@ -81,10 +80,10 @@ class ScheduleActivity : FragmentActivity() {
addRule(RelativeLayout.ALIGN_PARENT_BOTTOM)
}
}
- window.navigationBarColor = getColor(R.color.background)
+// window.navigationBarColor = getColor(R.color.background)
return
}
- window.navigationBarColor = getColor(R.color.tab_back)
+// window.navigationBarColor = getColor(R.color.tab_back)
binding.examModeAlert.apply {
visibility = View.VISIBLE
layoutParams = RelativeLayout.LayoutParams(
@@ -97,7 +96,7 @@ class ScheduleActivity : FragmentActivity() {
startActivity(Intent(context, SettingsActivity::class.java))
}
}
- binding.examModeAlertIcon.setColorFilter(getColor(R.color.translucent))
+ binding.examModeAlertIcon.setColorFilter(requireContext().getColor(R.color.translucent))
}
private fun setupOnStart() {
@@ -105,12 +104,12 @@ class ScheduleActivity : FragmentActivity() {
.document(uid)
.get()
.addOnSuccessListener { document ->
- if (isUpdated(document, prefs)) {
- prefs.edit().putInt(TIMETABLE_AVAILABLE, 0).apply()
- prefs.edit().putInt(UPDATE, 1).apply()
- val intent = Intent(this, InstructionsActivity::class.java)
+ if (UtilFunctions.isUpdated(document, prefs)) {
+ prefs.edit().putInt(Constants.TIMETABLE_AVAILABLE, 0).apply()
+ prefs.edit().putInt(Constants.UPDATE, 1).apply()
+ val intent = Intent(context, InstructionsActivity::class.java)
startActivity(intent)
- finish()
+ requireActivity().finish()
}
}
}
@@ -129,29 +128,29 @@ class ScheduleActivity : FragmentActivity() {
}
binding.VITEventsButton.setOnClickListener {
- val intent = Intent(this, VITEventsActivity::class.java)
+ val intent = Intent(context, VITEventsActivity::class.java)
startActivity(intent)
}
- binding.shareTimeTableButton.setOnClickListener {
- Toast.makeText(this, "Share Timetable Alpha", Toast.LENGTH_LONG).show()
- val rootView = window.decorView.findViewById(R.id.pager)
- rootView.setBackgroundColor(getColor(R.color.background))
- takeScreenshotAndShare(this, getBitmapFromView(rootView))
- }
+// binding.shareTimeTableButton.setOnClickListener {
+// Toast.makeText(context, "Share Timetable Alpha", Toast.LENGTH_LONG).show()
+// val rootView = window.decorView.findViewById(R.id.pager)
+// rootView.setBackgroundColor(getColor(R.color.background))
+// UtilFunctions.takeScreenshotAndShare(this, UtilFunctions.getBitmapFromView(rootView))
+// }
binding.scheduleToolbar.setOnMenuItemClickListener { menuItem ->
when (menuItem.itemId) {
R.id.logout -> {
- LogoutHelper.logout(this, this as Activity, prefs)
+ LogoutHelper.logout(requireContext(), requireContext() as Activity, prefs)
true
}
R.id.settings -> {
- startActivity(Intent(this, SettingsActivity::class.java))
+ startActivity(Intent(context, SettingsActivity::class.java))
true
}
R.id.support -> {
- openLink(this, getString(R.string.telegram_link))
+ UtilFunctions.openLink(requireContext(), getString(R.string.telegram_link))
true
}
R.id.share -> {
@@ -164,9 +163,9 @@ class ScheduleActivity : FragmentActivity() {
getString(R.string.share_text)
)
val pendingIntent = PendingIntent.getBroadcast(
- this,
- SHARE_INTENT,
- Intent(this, ShareReceiver::class.java),
+ context,
+ Constants.SHARE_INTENT,
+ Intent(context, ShareReceiver::class.java),
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE
else
@@ -197,18 +196,22 @@ class ScheduleActivity : FragmentActivity() {
}
private fun firstTimeSetup() {
- var max = 6
- val upCode = prefs.getInt(UPDATE_CODE, 0)
- if (!prefs.getBoolean(FIRST_TIME_SETUP, false) || upCode != BuildConfig.VERSION_CODE) {
+ val max = 6
+ val upCode = prefs.getInt(Constants.UPDATE_CODE, 0)
+ if (!prefs.getBoolean(
+ Constants.FIRST_TIME_SETUP,
+ false
+ ) || upCode != BuildConfig.VERSION_CODE
+ ) {
var count = 1
val v: View = LayoutInflater
- .from(this)
+ .from(context)
.inflate(R.layout.dialog_setup_complete, null)
- val dialog = MaterialAlertDialogBuilder(this)
+ val dialog = MaterialAlertDialogBuilder(requireContext())
.setView(v)
.setBackground(
AppCompatResources.getDrawable(
- this,
+ requireContext(),
R.color.transparent
)
)
@@ -221,7 +224,11 @@ class ScheduleActivity : FragmentActivity() {
val title = v.findViewById(R.id.title)
val desc = v.findViewById(R.id.description)
- if (prefs.getBoolean(FIRST_TIME_SETUP, false) && upCode < BuildConfig.VERSION_CODE) {
+ if (prefs.getBoolean(
+ Constants.FIRST_TIME_SETUP,
+ false
+ ) && upCode < BuildConfig.VERSION_CODE
+ ) {
val msg = introMessage(max - 1)
title.text = msg[0]
desc.text = msg[1]
@@ -232,8 +239,8 @@ class ScheduleActivity : FragmentActivity() {
skip.setOnClickListener {
prefs.edit {
- putBoolean(FIRST_TIME_SETUP, true)
- putInt(UPDATE_CODE, BuildConfig.VERSION_CODE)
+ putBoolean(Constants.FIRST_TIME_SETUP, true)
+ putInt(Constants.UPDATE_CODE, BuildConfig.VERSION_CODE)
apply()
}
dialog.dismiss()
@@ -250,8 +257,8 @@ class ScheduleActivity : FragmentActivity() {
}
if (count > max) {
prefs.edit {
- putBoolean(FIRST_TIME_SETUP, true)
- putInt(UPDATE_CODE, BuildConfig.VERSION_CODE)
+ putBoolean(Constants.FIRST_TIME_SETUP, true)
+ putInt(Constants.UPDATE_CODE, BuildConfig.VERSION_CODE)
apply()
}
dialog.dismiss()
@@ -261,6 +268,7 @@ class ScheduleActivity : FragmentActivity() {
}
}
+
private fun introMessage(pos: Int): List {
return when (pos) {
0 -> listOf(getString(R.string.congratulations), getString(R.string.complete_msg))
@@ -272,4 +280,19 @@ class ScheduleActivity : FragmentActivity() {
else -> listOf(getString(R.string.final_heading), getString(R.string.about_final))
}
}
-}
+
+ override fun onStart() {
+ super.onStart()
+ setupOnStart()
+ }
+
+ override fun onResume() {
+ super.onResume()
+ checkExamMode()
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ _binding = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dscvit/vitty/ui/schedule/ScheduleViewModel.kt b/app/src/main/java/com/dscvit/vitty/ui/schedule/ScheduleViewModel.kt
new file mode 100644
index 0000000..00e59ae
--- /dev/null
+++ b/app/src/main/java/com/dscvit/vitty/ui/schedule/ScheduleViewModel.kt
@@ -0,0 +1,6 @@
+package com.dscvit.vitty.ui.schedule
+
+import androidx.lifecycle.ViewModel
+
+class ScheduleViewModel : ViewModel() {
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dscvit/vitty/ui/settings/AccountPreference.kt b/app/src/main/java/com/dscvit/vitty/ui/settings/AccountPreference.kt
index a9dd61c..c498702 100755
--- a/app/src/main/java/com/dscvit/vitty/ui/settings/AccountPreference.kt
+++ b/app/src/main/java/com/dscvit/vitty/ui/settings/AccountPreference.kt
@@ -12,14 +12,14 @@ import com.google.firebase.auth.FirebaseUser
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
-class AccountPreference(context: Context?, attrs: AttributeSet?) : Preference(context, attrs) {
+class AccountPreference(context: Context, attrs: AttributeSet?) : Preference(context, attrs) {
private val firebaseUser: FirebaseUser = Firebase.auth.currentUser!!
- override fun onBindViewHolder(holder: PreferenceViewHolder?) {
+ override fun onBindViewHolder(holder: PreferenceViewHolder) {
super.onBindViewHolder(holder)
- holder?.itemView?.findViewById(R.id.title)?.text = firebaseUser.displayName
- holder?.itemView?.findViewById(R.id.summary)?.text = firebaseUser.email
- holder?.itemView?.findViewById(R.id.icon)?.load(firebaseUser.photoUrl)
+ holder.itemView.findViewById(R.id.title)?.text = firebaseUser.displayName
+ holder.itemView.findViewById(R.id.summary)?.text = firebaseUser.email
+ holder.itemView.findViewById(R.id.icon)?.load(firebaseUser.photoUrl)
}
init {
diff --git a/app/src/main/java/com/dscvit/vitty/util/UtilFunctions.kt b/app/src/main/java/com/dscvit/vitty/util/UtilFunctions.kt
index 491462d..c67653f 100755
--- a/app/src/main/java/com/dscvit/vitty/util/UtilFunctions.kt
+++ b/app/src/main/java/com/dscvit/vitty/util/UtilFunctions.kt
@@ -1,6 +1,8 @@
package com.dscvit.vitty.util
import android.appwidget.AppWidgetManager
+import android.content.ClipData
+import android.content.ClipboardManager
import android.content.ComponentName
import android.content.Context
import android.content.Intent
@@ -35,6 +37,18 @@ object UtilFunctions {
}
}
+ fun copyItem(context: Context, item: String, label: String, url: String) {
+ Toast.makeText(
+ context,
+ "$item Copied",
+ Toast.LENGTH_LONG
+ ).show()
+ val clipboard: ClipboardManager? =
+ context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager?
+ val clip = ClipData.newPlainText(label, url)
+ clipboard?.setPrimaryClip(clip)
+ }
+
fun reloadWidgets(context: Context) {
reloadWidget(context, NextClassWidget::class.java)
reloadWidget(context, TodayWidget::class.java)
diff --git a/app/src/main/res/drawable/ic_community_filled.xml b/app/src/main/res/drawable/ic_community_filled.xml
new file mode 100644
index 0000000..d978a69
--- /dev/null
+++ b/app/src/main/res/drawable/ic_community_filled.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_community_outline.xml b/app/src/main/res/drawable/ic_community_outline.xml
new file mode 100644
index 0000000..e456b12
--- /dev/null
+++ b/app/src/main/res/drawable/ic_community_outline.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_community_selector.xml b/app/src/main/res/drawable/ic_community_selector.xml
new file mode 100644
index 0000000..c6164e3
--- /dev/null
+++ b/app/src/main/res/drawable/ic_community_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_timetable_filled.xml b/app/src/main/res/drawable/ic_timetable_filled.xml
new file mode 100644
index 0000000..51027b5
--- /dev/null
+++ b/app/src/main/res/drawable/ic_timetable_filled.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_timetable_outline.xml b/app/src/main/res/drawable/ic_timetable_outline.xml
new file mode 100644
index 0000000..6706b8f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_timetable_outline.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_timetable_selector.xml b/app/src/main/res/drawable/ic_timetable_selector.xml
new file mode 100644
index 0000000..e67e0e7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_timetable_selector.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml
new file mode 100644
index 0000000..32a18e8
--- /dev/null
+++ b/app/src/main/res/layout/activity_home.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_community.xml b/app/src/main/res/layout/fragment_community.xml
new file mode 100644
index 0000000..01fa8af
--- /dev/null
+++ b/app/src/main/res/layout/fragment_community.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_day.xml b/app/src/main/res/layout/fragment_day.xml
index 287ddc3..d08c993 100755
--- a/app/src/main/res/layout/fragment_day.xml
+++ b/app/src/main/res/layout/fragment_day.xml
@@ -14,6 +14,7 @@
android:clipToPadding="false"
android:layoutAnimation="@anim/layout_animation"
android:paddingTop="10dp"
+ tools:listitem="@layout/card_period"
android:paddingBottom="180dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
diff --git a/app/src/main/res/layout/activity_schedule.xml b/app/src/main/res/layout/fragment_schedule.xml
old mode 100755
new mode 100644
similarity index 94%
rename from app/src/main/res/layout/activity_schedule.xml
rename to app/src/main/res/layout/fragment_schedule.xml
index 84d69a9..0df7428
--- a/app/src/main/res/layout/activity_schedule.xml
+++ b/app/src/main/res/layout/fragment_schedule.xml
@@ -1,7 +1,8 @@
+ xmlns:tools="http://schemas.android.com/tools"
+ tools:context=".ui.schedule.ScheduleFragment">
+ android:padding="5dp"
+ android:visibility="gone"
+ tools:visibility="visible">
diff --git a/app/src/main/res/layout/item_period.xml b/app/src/main/res/layout/item_period.xml
index 56dd343..b87e707 100755
--- a/app/src/main/res/layout/item_period.xml
+++ b/app/src/main/res/layout/item_period.xml
@@ -49,7 +49,7 @@
android:paddingStart="5dp"
android:paddingEnd="20dp"
android:text="@string/sample_room"
- android:textSize="15sp" />
+ android:textSize="14sp" />
\ No newline at end of file
diff --git a/app/src/main/res/menu/bottom_nav_menu.xml b/app/src/main/res/menu/bottom_nav_menu.xml
new file mode 100644
index 0000000..d238490
--- /dev/null
+++ b/app/src/main/res/menu/bottom_nav_menu.xml
@@ -0,0 +1,14 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml
new file mode 100644
index 0000000..bc72737
--- /dev/null
+++ b/app/src/main/res/navigation/mobile_navigation.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index d8926dc..6eb7d2a 100755
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -56,7 +56,7 @@
Get control of the notifications by tapping on ⋮ > Settings > Notifications.\n\nThere you can:\n1. Turn on No CLasses Mode to pause your class notifications.\n2. Individually turn on/off notifications for your classes (Android 8+ only).
To get notifications on time, keep the battery optimisations for the app turned off.\n\nTo change this setting, tap on ⋮ > Settings > Battery.
Don\'t know which class is where? Don\'t worry, we\'ve got you covered!\n\nNow you can hit the directions button on the Next Class widget or tap on a room number in the app to start navigation to your class!
- 1. VIT Events is now available on VITTY.\n2. Share your timetable with your friends.\n3. Exam/Holiday Mode is now called No Classes Mode.
+ 1. Exam/Holiday Mode is now called No Classes Mode.
Let\'s go!
You\'re all set to start using the app.
Congratulations!
@@ -84,6 +84,8 @@
https://dscv.it/telegram
Support
SJT101
+ Timetable
+ Community
- Don\'t you have a quiz coming up?
- Finish your DAs!
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index feca4b0..03a41fa 100755
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -15,7 +15,7 @@
- @font/poppins_400
- @color/translucent
- @color/background
- - @color/background
+ - @color/tab_back
- @color/white
- @drawable/menu_background
diff --git a/build.gradle b/build.gradle
index 455e351..aa4d177 100755
--- a/build.gradle
+++ b/build.gradle
@@ -8,7 +8,7 @@ buildscript {
}
}
dependencies {
- classpath 'com.android.tools.build:gradle:7.1.3'
+ classpath 'com.android.tools.build:gradle:7.2.1'
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21'
classpath 'com.google.gms:google-services:4.3.10'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 3c026e4..ba3018c 100755
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip
From 69a669490f6d21951951688f671f22e7f9e84fb7 Mon Sep 17 00:00:00 2001
From: Yajat Malhotra <68477362+iamyajat@users.noreply.github.com>
Date: Sun, 5 Feb 2023 02:30:02 +0530
Subject: [PATCH 2/2] feat: requests page
---
.../vitty/ui/community/CommunityFragment.kt | 33 +++
.../vitty/ui/community/RequestsFragment.kt | 67 +++++
.../com/dscvit/vitty/util/APIConstants.kt | 6 +
app/src/main/res/drawable/ic_requests.xml | 5 +
app/src/main/res/drawable/nav_color.xml | 6 +
app/src/main/res/layout/activity_home.xml | 5 +-
.../main/res/layout/fragment_community.xml | 244 +++++++++++++++++-
app/src/main/res/layout/fragment_requests.xml | 123 +++++++++
app/src/main/res/menu/community_menu.xml | 10 +
app/src/main/res/menu/requests_menu.xml | 10 +
.../main/res/navigation/mobile_navigation.xml | 11 +-
app/src/main/res/values/colors.xml | 4 +-
12 files changed, 515 insertions(+), 9 deletions(-)
create mode 100644 app/src/main/java/com/dscvit/vitty/ui/community/RequestsFragment.kt
create mode 100644 app/src/main/java/com/dscvit/vitty/util/APIConstants.kt
create mode 100644 app/src/main/res/drawable/ic_requests.xml
create mode 100644 app/src/main/res/drawable/nav_color.xml
create mode 100644 app/src/main/res/layout/fragment_requests.xml
create mode 100644 app/src/main/res/menu/community_menu.xml
create mode 100644 app/src/main/res/menu/requests_menu.xml
diff --git a/app/src/main/java/com/dscvit/vitty/ui/community/CommunityFragment.kt b/app/src/main/java/com/dscvit/vitty/ui/community/CommunityFragment.kt
index ffd4a82..dee1479 100644
--- a/app/src/main/java/com/dscvit/vitty/ui/community/CommunityFragment.kt
+++ b/app/src/main/java/com/dscvit/vitty/ui/community/CommunityFragment.kt
@@ -1,16 +1,22 @@
package com.dscvit.vitty.ui.community
+import android.content.SharedPreferences
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
+import androidx.navigation.findNavController
+import com.dscvit.vitty.R
import com.dscvit.vitty.databinding.FragmentCommunityBinding
+import com.dscvit.vitty.util.Constants
class CommunityFragment : Fragment() {
private var _binding: FragmentCommunityBinding? = null
+ private lateinit var prefs: SharedPreferences
+
// This property is only valid between onCreateView and
// onDestroyView.
@@ -27,6 +33,33 @@ class CommunityFragment : Fragment() {
_binding = FragmentCommunityBinding.inflate(inflater, container, false)
val root: View = binding.root
+ prefs = requireContext().getSharedPreferences(Constants.USER_INFO, 0)
+
+ binding.communityToolbar.setOnMenuItemClickListener { menuItem ->
+ when (menuItem.itemId) {
+ R.id.requests -> {
+ requireView().findNavController()
+ .navigate(R.id.action_navigation_community_to_navigation_requests)
+ true
+ }
+ else -> {
+ false
+ }
+ }
+ }
+
+ if (!prefs.getBoolean("KRISH", false)) {
+ binding.krish.visibility = View.GONE
+ } else {
+ binding.krish.visibility = View.VISIBLE
+ }
+
+ binding.krish.setOnLongClickListener {
+ prefs.edit().putBoolean("KRISH", false).apply()
+ binding.krish.visibility = View.GONE
+ true
+ }
+
return root
}
diff --git a/app/src/main/java/com/dscvit/vitty/ui/community/RequestsFragment.kt b/app/src/main/java/com/dscvit/vitty/ui/community/RequestsFragment.kt
new file mode 100644
index 0000000..c31d48c
--- /dev/null
+++ b/app/src/main/java/com/dscvit/vitty/ui/community/RequestsFragment.kt
@@ -0,0 +1,67 @@
+package com.dscvit.vitty.ui.community
+
+import android.content.SharedPreferences
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.ViewModelProvider
+import com.dscvit.vitty.R
+import com.dscvit.vitty.databinding.FragmentRequestsBinding
+import com.dscvit.vitty.util.Constants
+
+class RequestsFragment : Fragment() {
+
+ private var _binding: FragmentRequestsBinding? = null
+
+ // This property is only valid between onCreateView and
+ // onDestroyView.
+ private val binding get() = _binding!!
+ private lateinit var prefs: SharedPreferences
+
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ val communityViewModel =
+ ViewModelProvider(this)[CommunityViewModel::class.java]
+
+ _binding = FragmentRequestsBinding.inflate(inflater, container, false)
+ val root: View = binding.root
+
+ prefs = requireContext().getSharedPreferences(Constants.USER_INFO, 0)
+
+ binding.scheduleToolbar.setOnMenuItemClickListener { menuItem ->
+ when (menuItem.itemId) {
+ R.id.close -> {
+ requireActivity().onBackPressed()
+ true
+ }
+ else -> {
+ false
+ }
+ }
+ }
+
+ binding.logout.setOnClickListener {
+ prefs.edit().putBoolean("KRISH", true).apply()
+ binding.reqKrish.visibility = View.GONE
+ }
+
+ if (prefs.getBoolean("KRISH", false)) {
+ binding.reqKrish.visibility = View.GONE
+ } else {
+ binding.reqKrish.visibility = View.VISIBLE
+ }
+
+ return root
+ }
+
+ override fun onDestroyView() {
+ super.onDestroyView()
+ _binding = null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/dscvit/vitty/util/APIConstants.kt b/app/src/main/java/com/dscvit/vitty/util/APIConstants.kt
new file mode 100644
index 0000000..ed05084
--- /dev/null
+++ b/app/src/main/java/com/dscvit/vitty/util/APIConstants.kt
@@ -0,0 +1,6 @@
+package com.dscvit.vitty.util
+
+object APIConstants {
+ const val BASE_URL = "https://shielded-beyond-17845.herokuapp.com"
+ const val TIMEOUT = 10
+}
diff --git a/app/src/main/res/drawable/ic_requests.xml b/app/src/main/res/drawable/ic_requests.xml
new file mode 100644
index 0000000..89c57d7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_requests.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/nav_color.xml b/app/src/main/res/drawable/nav_color.xml
new file mode 100644
index 0000000..6d52bcc
--- /dev/null
+++ b/app/src/main/res/drawable/nav_color.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml
index 32a18e8..3c59d3d 100644
--- a/app/src/main/res/layout/activity_home.xml
+++ b/app/src/main/res/layout/activity_home.xml
@@ -14,8 +14,9 @@
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:background="@color/tab_back"
- app:itemIconTint="@color/white"
- app:itemTextColor="@color/white"
+ app:itemIconTint="@drawable/nav_color"
+ app:itemTextColor="@drawable/nav_color"
+ app:itemRippleColor="@color/translucent_ripple"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
diff --git a/app/src/main/res/layout/fragment_community.xml b/app/src/main/res/layout/fragment_community.xml
index 01fa8af..e28c17b 100644
--- a/app/src/main/res/layout/fragment_community.xml
+++ b/app/src/main/res/layout/fragment_community.xml
@@ -10,19 +10,20 @@
android:animateLayoutChanges="true">
@@ -30,10 +31,243 @@
+ android:visibility="gone" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_requests.xml b/app/src/main/res/layout/fragment_requests.xml
new file mode 100644
index 0000000..e173b2f
--- /dev/null
+++ b/app/src/main/res/layout/fragment_requests.xml
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/community_menu.xml b/app/src/main/res/menu/community_menu.xml
new file mode 100644
index 0000000..7be1990
--- /dev/null
+++ b/app/src/main/res/menu/community_menu.xml
@@ -0,0 +1,10 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/requests_menu.xml b/app/src/main/res/menu/requests_menu.xml
new file mode 100644
index 0000000..beb0241
--- /dev/null
+++ b/app/src/main/res/menu/requests_menu.xml
@@ -0,0 +1,10 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml
index bc72737..3ec965c 100644
--- a/app/src/main/res/navigation/mobile_navigation.xml
+++ b/app/src/main/res/navigation/mobile_navigation.xml
@@ -14,5 +14,14 @@
android:id="@+id/navigation_community"
android:name="com.dscvit.vitty.ui.community.CommunityFragment"
android:label="@string/title_community"
- tools:layout="@layout/fragment_community" />
+ tools:layout="@layout/fragment_community" >
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index e4fd43f..462794f 100755
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,5 +1,5 @@
-
+
#FF000000
#FFFFFFFF
#D1D1D1
@@ -9,6 +9,7 @@
#082F63
#041727
#688FBC
+ #25688FBC
#9DBADC
#C3D4E8
#AD5B7CA1
@@ -17,4 +18,5 @@
#99126AFC
#1A126AFC
#00000000
+ @color/translucent
\ No newline at end of file