diff --git a/.idea/misc.xml b/.idea/misc.xml
index 4bcf062..cb0e206 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -23,6 +23,7 @@
+
@@ -80,6 +81,7 @@
+
diff --git a/app/build.gradle b/app/build.gradle
index 38e162a..23da3d6 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -10,8 +10,8 @@ android {
applicationId "com.ethosa.ktc"
minSdk 21
targetSdk 32
- versionCode 14
- versionName "0.8.3"
+ versionCode 15
+ versionName "0.8.4"
ndk {
abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 12cd487..04d22b6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -14,6 +14,17 @@
android:theme="@style/Theme.KTC"
android:usesCleartextTraffic="true"
tools:targetApi="m">
+
+
+
+
+
+
+
@@ -38,9 +49,9 @@
android:theme="@style/Theme.KTC.NoActionBar" />
+ android:exported="true">
diff --git a/app/src/main/java/com/ethosa/ktc/ui/fragments/TimetableFragment.kt b/app/src/main/java/com/ethosa/ktc/ui/fragments/TimetableFragment.kt
index e08197a..0910743 100644
--- a/app/src/main/java/com/ethosa/ktc/ui/fragments/TimetableFragment.kt
+++ b/app/src/main/java/com/ethosa/ktc/ui/fragments/TimetableFragment.kt
@@ -70,6 +70,10 @@ class TimetableFragment : IOFragmentBackPressed() {
// toggle isStudent
binding.toggleTimetable.setOnClickListener {
Preferences.isStudent = !Preferences.isStudent
+ if (Preferences.isStudent && Preferences.timetableState == 2 && Preferences.teacherId == 0)
+ Preferences.isStudent = !Preferences.isStudent
+ if (!Preferences.isStudent && Preferences.timetableState == 2 && Preferences.group!!.id == 0)
+ Preferences.isStudent = !Preferences.isStudent
loadState()
}
diff --git a/app/src/main/java/com/ethosa/ktc/ui/widgets/TeacherTimetableWidget.kt b/app/src/main/java/com/ethosa/ktc/ui/widgets/TeacherTimetableWidget.kt
new file mode 100644
index 0000000..9353fd5
--- /dev/null
+++ b/app/src/main/java/com/ethosa/ktc/ui/widgets/TeacherTimetableWidget.kt
@@ -0,0 +1,145 @@
+package com.ethosa.ktc.ui.widgets
+
+import android.annotation.SuppressLint
+import android.app.PendingIntent
+import android.appwidget.AppWidgetManager
+import android.appwidget.AppWidgetProvider
+import android.content.ComponentName
+import android.content.Context
+import android.content.Intent
+import android.os.Build
+import android.widget.RemoteViews
+import com.ethosa.ktc.Preferences
+import com.ethosa.ktc.R
+import com.ethosa.ktc.college.CollegeApi
+import com.ethosa.ktc.college.CollegeCallback
+import com.ethosa.ktc.college.teacher.TeacherTimetable
+import com.ethosa.ktc.ui.activities.MainActivity
+import com.google.gson.Gson
+import okhttp3.Call
+import okhttp3.Response
+import java.util.*
+
+
+/**
+ * Implementation of App Widget functionality.
+ */
+class TeacherTimetableWidget : AppWidgetProvider() {
+ private val college = CollegeApi()
+ private var preferences: Preferences? = null
+
+ override fun onUpdate(
+ context: Context,
+ appWidgetManager: AppWidgetManager,
+ appWidgetIds: IntArray
+ ) {
+ preferences = Preferences(context)
+ // There may be multiple widgets active, so update all of them
+ for (appWidgetId in appWidgetIds) {
+ updateAppWidget(context, appWidgetManager, appWidgetId)
+ }
+ }
+
+ /**
+ * Update timetable for current widget
+ */
+ @SuppressLint("UnspecifiedImmutableFlag")
+ private fun updateWidgetPendingIntent(
+ context: Context?,
+ appWidgetId: Int
+ ): PendingIntent {
+ val intent = Intent(context, TimetableWidget::class.java)
+ val ids = AppWidgetManager.getInstance(context)
+ .getAppWidgetIds(ComponentName(context!!, TimetableWidget::class.java))
+ intent.action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
+ intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids)
+
+ return PendingIntent.getBroadcast(
+ context,
+ appWidgetId,
+ intent,
+ when {
+ Build.VERSION.SDK_INT >= 31 -> PendingIntent.FLAG_MUTABLE
+ else -> PendingIntent.FLAG_UPDATE_CURRENT
+ })
+ }
+
+ /**
+ * Open app with pending intent
+ */
+ @SuppressLint("UnspecifiedImmutableFlag")
+ private fun openAppPendingIntent(
+ context: Context?,
+ appWidgetId: Int
+ ): PendingIntent {
+ val intent = Intent(context, MainActivity::class.java)
+ return PendingIntent.getActivity(
+ context,
+ appWidgetId,
+ intent,
+ when {
+ Build.VERSION.SDK_INT >= 31 -> PendingIntent.FLAG_MUTABLE
+ else -> PendingIntent.FLAG_UPDATE_CURRENT
+ })
+ }
+
+ @SuppressLint("RemoteViewLayout")
+ private fun updateAppWidget(
+ context: Context,
+ appWidgetManager: AppWidgetManager,
+ appWidgetId: Int
+ ) {
+ // Construct the RemoteViews object
+ val views = RemoteViews(context.packageName, R.layout.widget_timetable)
+ views.setOnClickPendingIntent(
+ R.id.timetable_widget_reload,
+ updateWidgetPendingIntent(context, appWidgetId)
+ )
+ views.setOnClickPendingIntent(
+ R.id.timetable_widget_background,
+ openAppPendingIntent(context, appWidgetId)
+ )
+ // Load last group ID
+ val teacherId = Preferences.teacherId
+ val branchId = Preferences.branch!!.id
+ val calendar = Calendar.getInstance()
+ val weekday = calendar.get(Calendar.DAY_OF_WEEK)
+
+ college.fetchTeacherTimetable(branchId, teacherId, object : CollegeCallback {
+ @SuppressLint("SetTextI18n")
+ override fun onResponse(call: Call, response: Response) {
+ // Parse JSON
+ val json = response.body?.string()
+ val timetable = Gson().fromJson(json, TeacherTimetable::class.java)
+ println(weekday)
+ // Get current day timetable
+ val day =
+ when {
+ weekday >= 2 -> timetable.week[weekday-2]
+ weekday > 1 -> timetable.week[1]
+ else -> timetable.week[0]
+ }
+
+ // Setup widget
+ views.setTextViewText(R.id.timetable_widget_title, "${timetable.teacher} - ${day.title}")
+ views.removeAllViews(R.id.timetable_widget_lessons)
+
+ // Setup views
+ for (l in day.lessons) {
+ println(l)
+ // Load lesson data
+ if (l.group == "") continue
+ val lesson = RemoteViews(context.packageName, R.layout.widget_tlesson)
+ lesson.setTextViewText(R.id.widget_tlesson_title, l.title)
+ lesson.setTextViewText(R.id.widget_tlesson_classroom, l.classroom)
+ lesson.setTextViewText(R.id.widget_tlesson_group, l.group)
+ lesson.setTextViewText(R.id.widget_tlesson_number, l.number)
+ views.addView(R.id.timetable_widget_lessons, lesson)
+ }
+ // Update widget
+ appWidgetManager.updateAppWidget(appWidgetId, views)
+ }
+ })
+ appWidgetManager.updateAppWidget(appWidgetId, views)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/ethosa/ktc/ui/widgets/TimetableWidget.kt b/app/src/main/java/com/ethosa/ktc/ui/widgets/TimetableWidget.kt
index e473fb6..7418772 100644
--- a/app/src/main/java/com/ethosa/ktc/ui/widgets/TimetableWidget.kt
+++ b/app/src/main/java/com/ethosa/ktc/ui/widgets/TimetableWidget.kt
@@ -7,9 +7,9 @@ import android.appwidget.AppWidgetProvider
import android.content.ComponentName
import android.content.Context
import android.content.Intent
-import android.content.SharedPreferences
import android.os.Build
import android.widget.RemoteViews
+import com.ethosa.ktc.Preferences
import com.ethosa.ktc.R
import com.ethosa.ktc.college.CollegeApi
import com.ethosa.ktc.college.CollegeCallback
@@ -26,14 +26,14 @@ import java.util.*
*/
class TimetableWidget : AppWidgetProvider() {
private val college = CollegeApi()
- private var preferences: SharedPreferences? = null
+ private var preferences: Preferences? = null
override fun onUpdate(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetIds: IntArray
) {
- preferences = context.getSharedPreferences("com.ethosa.ktc", Context.MODE_PRIVATE)
+ preferences = Preferences(context)
// There may be multiple widgets active, so update all of them
for (appWidgetId in appWidgetIds) {
updateAppWidget(context, appWidgetManager, appWidgetId)
@@ -100,11 +100,11 @@ class TimetableWidget : AppWidgetProvider() {
openAppPendingIntent(context, appWidgetId)
)
// Load last group ID
- val groupId = preferences?.getInt("group", 0)
+ val groupId = Preferences.group!!.id
val calendar = Calendar.getInstance()
val weekday = calendar.get(Calendar.DAY_OF_WEEK)
- college.fetchTimetable(groupId!!, object : CollegeCallback {
+ college.fetchTimetable(groupId, object : CollegeCallback {
@SuppressLint("SetTextI18n")
override fun onResponse(call: Call, response: Response) {
// Parse JSON
diff --git a/app/src/main/res/drawable-v21/ic_reload.xml b/app/src/main/res/drawable/ic_reload.xml
similarity index 100%
rename from app/src/main/res/drawable-v21/ic_reload.xml
rename to app/src/main/res/drawable/ic_reload.xml
diff --git a/app/src/main/res/layout/widget_lesson.xml b/app/src/main/res/layout/widget_lesson.xml
index b7d68b4..113f95e 100644
--- a/app/src/main/res/layout/widget_lesson.xml
+++ b/app/src/main/res/layout/widget_lesson.xml
@@ -72,7 +72,6 @@
android:lineSpacingExtra="-4sp"
android:padding="0dp"
android:text="@string/lesson_title"
- android:textSize="14sp"
tools:textStyle="bold" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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
index 9df9efd..cf29372 100644
--- a/app/src/main/res/menu/bottom_nav_menu.xml
+++ b/app/src/main/res/menu/bottom_nav_menu.xml
@@ -18,6 +18,6 @@
\ 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 ee18d10..42c447a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -5,7 +5,8 @@
Github
Расписание
- Отображается расписание на сегодня
+ Виджет отображает расписание для студентов на сегодняшний день
+ Виджет отображает расписание для преподавателей на сегодняшний день
Доступно обновление!
Обновить приложение
@@ -15,7 +16,7 @@
Новости
Расписание
Галерея
- Настройки
+ Личный кабинет
О приложении
Контактная информация
ProCollege
@@ -63,4 +64,5 @@
Placeholder
v0.0.1
+ EXAMPLE
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index a37e439..5e462d2 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -1,4 +1,5 @@
+