added color saving
** WARNING this contains issues, many issues **
This commit is contained in:
parent
e69354af96
commit
87bf614d28
|
@ -32,12 +32,16 @@ dependencies {
|
||||||
implementation 'androidx.appcompat:appcompat:1.0.2'
|
implementation 'androidx.appcompat:appcompat:1.0.2'
|
||||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||||
implementation 'com.google.android.material:material:1.0.0'
|
implementation 'com.google.android.material:material:1.0.0'
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
|
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha3'
|
||||||
implementation 'org.jsoup:jsoup:1.11.3'
|
implementation 'org.jsoup:jsoup:1.11.3'
|
||||||
implementation 'org.jetbrains.anko:anko-commons:0.10.8'
|
implementation 'org.jetbrains.anko:anko-commons:0.10.8'
|
||||||
implementation 'com.afollestad:aesthetic:1.0.0-beta05'
|
implementation 'com.afollestad:aesthetic:1.0.0-beta05'
|
||||||
implementation 'com.afollestad.material-dialogs:core:2.0.0-rc3'
|
implementation 'com.afollestad.material-dialogs:core:2.0.0-rc5'
|
||||||
implementation 'com.afollestad.material-dialogs:color:2.0.0-rc3'
|
implementation 'com.afollestad.material-dialogs:color:2.0.0-rc5'
|
||||||
|
|
||||||
|
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.0'
|
||||||
|
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.0'
|
||||||
|
|
||||||
testImplementation 'junit:junit:4.12'
|
testImplementation 'junit:junit:4.12'
|
||||||
androidTestImplementation 'androidx.test:runner:1.1.1'
|
androidTestImplementation 'androidx.test:runner:1.1.1'
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
|
||||||
|
|
|
@ -35,6 +35,9 @@ import com.afollestad.materialdialogs.MaterialDialog
|
||||||
import com.google.android.material.navigation.NavigationView
|
import com.google.android.material.navigation.NavigationView
|
||||||
import kotlinx.android.synthetic.main.activity_main.*
|
import kotlinx.android.synthetic.main.activity_main.*
|
||||||
import kotlinx.android.synthetic.main.app_bar_main.*
|
import kotlinx.android.synthetic.main.app_bar_main.*
|
||||||
|
import kotlinx.coroutines.GlobalScope
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.coroutines.runBlocking
|
||||||
import org.jetbrains.anko.doAsync
|
import org.jetbrains.anko.doAsync
|
||||||
import org.jetbrains.anko.uiThread
|
import org.jetbrains.anko.uiThread
|
||||||
import org.mosad.seil0.projectlaogai.fragments.*
|
import org.mosad.seil0.projectlaogai.fragments.*
|
||||||
|
@ -48,10 +51,15 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
|
||||||
|
|
||||||
private var weekMenus = ArrayList<Meal>()
|
private var weekMenus = ArrayList<Meal>()
|
||||||
private var courseTTLinkList = ArrayList<CourseTTLink>()
|
private var courseTTLinkList = ArrayList<CourseTTLink>()
|
||||||
private var timeTableCurrentWeek = arrayOf<Array<Lesson>>()
|
//private var timeTableCurrentWeek = arrayOf<Array<Lesson>>()
|
||||||
private var timeTableNextWeek = arrayOf<Array<Lesson>>()
|
//private var timeTableNextWeek = arrayOf<Array<Lesson>>()
|
||||||
|
private lateinit var timeTableCurrentWeek : Array<Array<Lesson>>
|
||||||
|
private lateinit var timeTableNextWeek: Array<Array<Lesson>>
|
||||||
|
|
||||||
private lateinit var course: CourseTTLink
|
private lateinit var course: CourseTTLink
|
||||||
|
private var color: Int = Color.BLACK
|
||||||
|
|
||||||
|
private var ls = Lesson("","","", "")
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
Aesthetic.attach(this)
|
Aesthetic.attach(this)
|
||||||
|
@ -59,24 +67,26 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
|
||||||
setContentView(R.layout.activity_main)
|
setContentView(R.layout.activity_main)
|
||||||
setSupportActionBar(toolbar)
|
setSupportActionBar(toolbar)
|
||||||
|
|
||||||
|
// load mensa, timetable and color
|
||||||
|
load()
|
||||||
|
|
||||||
// If we haven't set any defaults, do that now
|
// If we haven't set any defaults, do that now
|
||||||
if (Aesthetic.isFirstTime) {
|
if (Aesthetic.isFirstTime) {
|
||||||
// this is executed on the first app start, use this to show tutorial etc.
|
// this is executed on the first app start, use this to show tutorial etc.
|
||||||
Aesthetic.config {
|
Aesthetic.config {
|
||||||
colorPrimary(Color.YELLOW)
|
colorPrimary(Color.BLACK)
|
||||||
apply()
|
apply()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Aesthetic.config {
|
Aesthetic.config {
|
||||||
colorPrimary(Color.YELLOW)
|
colorPrimary(color)
|
||||||
colorPrimaryDark(Color.YELLOW)
|
colorPrimaryDark(color)
|
||||||
apply()
|
apply()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// load mensa and timetable
|
|
||||||
load()
|
|
||||||
|
|
||||||
//init home fragment TODO make a abstract fragment class
|
//init home fragment TODO make a abstract fragment class
|
||||||
val homeFragment = HomeFragment()
|
val homeFragment = HomeFragment()
|
||||||
|
@ -193,6 +203,17 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
|
||||||
timeTableCurrentWeek = timeTableParser.getTimeTable(course.courseTTLink.replace("http", "https"))
|
timeTableCurrentWeek = timeTableParser.getTimeTable(course.courseTTLink.replace("http", "https"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* save the primary color
|
||||||
|
*/
|
||||||
|
fun saveColorPrimary(color : Int) {
|
||||||
|
val sharedPref = getPreferences(MODE_PRIVATE) ?: return
|
||||||
|
with (sharedPref.edit()) {
|
||||||
|
putInt(getString(R.string.save_key_colorPrimary), color)
|
||||||
|
apply()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* load the mensa menus of the current week
|
* load the mensa menus of the current week
|
||||||
*/
|
*/
|
||||||
|
@ -206,11 +227,53 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
|
||||||
sharedPref.getString(getString(R.string.save_key_course), "AI3")!!
|
sharedPref.getString(getString(R.string.save_key_course), "AI3")!!
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// load saved color
|
||||||
|
color = sharedPref.getInt(getString(R.string.save_key_colorPrimary), Color.BLACK)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* load mensa, course timetable and courselist from the swfr/hso website
|
* load mensa, course timetable and courselist from the swfr/hso website
|
||||||
* TODO make an API see https://git.mosad.xyz/Seil0/TheCitadelofRicks
|
* TODO make an API see https://git.mosad.xyz/Seil0/TheCitadelofRicks
|
||||||
*/
|
*/
|
||||||
val time = measureTimeMillis {
|
val time = measureTimeMillis {
|
||||||
|
|
||||||
|
runBlocking {
|
||||||
|
/* getting the course list should be faster than the timetable,
|
||||||
|
* we need have time until the user opens the dialog
|
||||||
|
*/
|
||||||
|
val jobTTLinkList = GlobalScope.launch {
|
||||||
|
courseTTLinkList = timeTableParser.getCourseTTLinks()
|
||||||
|
}
|
||||||
|
|
||||||
|
val jobTTNextWeek = GlobalScope.launch {
|
||||||
|
timeTableNextWeek = timeTableParser.getTimeTable(course.courseTTLink.replace("week=0","week=1"))
|
||||||
|
println("next: " + timeTableNextWeek.size)
|
||||||
|
println(timeTableNextWeek)
|
||||||
|
println(ls.lessonSubject)
|
||||||
|
timeTableParser.printTimeTableWeek(timeTableNextWeek) // Wieso sind die daten hier noch im array
|
||||||
|
}
|
||||||
|
|
||||||
|
val jobTTCurrentWeek = GlobalScope.launch {
|
||||||
|
timeTableCurrentWeek = timeTableParser.getTimeTable(course.courseTTLink)
|
||||||
|
}
|
||||||
|
|
||||||
|
val jobMenus = GlobalScope.launch {
|
||||||
|
weekMenus = mensaParser.getMensaMenu()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
jobTTLinkList.join() // wait until child coroutine completes
|
||||||
|
jobTTNextWeek.join()
|
||||||
|
jobTTCurrentWeek.join()
|
||||||
|
jobMenus.join()
|
||||||
|
|
||||||
|
println("next end:" + timeTableNextWeek.size)
|
||||||
|
println(timeTableNextWeek)
|
||||||
|
timeTableParser.printTimeTableWeek(timeTableNextWeek) // und hier nicht mehr
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
/* getting the course list should be faster than the timetable,
|
/* getting the course list should be faster than the timetable,
|
||||||
* we need have time until the user opens the dialog
|
* we need have time until the user opens the dialog
|
||||||
*/
|
*/
|
||||||
|
@ -218,9 +281,14 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
|
||||||
courseTTLinkList = timeTableParser.getCourseTTLinks()
|
courseTTLinkList = timeTableParser.getCourseTTLinks()
|
||||||
}
|
}
|
||||||
|
|
||||||
doAsync {
|
val t0 = doAsync {
|
||||||
try {
|
try {
|
||||||
timeTableNextWeek = timeTableParser.getTimeTable(course.courseTTLink.replace("week=0","week=1"))
|
timeTableNextWeek = timeTableParser.getTimeTable(course.courseTTLink.replace("week=0","week=1"))
|
||||||
|
ls = timeTableNextWeek[0][0]
|
||||||
|
println("next: " + timeTableNextWeek.size)
|
||||||
|
println(timeTableNextWeek)
|
||||||
|
println(ls.lessonSubject)
|
||||||
|
timeTableParser.printTimeTableWeek(timeTableNextWeek)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
e.stackTrace
|
e.stackTrace
|
||||||
}
|
}
|
||||||
|
@ -233,6 +301,8 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
|
||||||
val t2 = doAsync {
|
val t2 = doAsync {
|
||||||
try {
|
try {
|
||||||
timeTableCurrentWeek = timeTableParser.getTimeTable(course.courseTTLink)
|
timeTableCurrentWeek = timeTableParser.getTimeTable(course.courseTTLink)
|
||||||
|
println("current: " + timeTableCurrentWeek.size)
|
||||||
|
timeTableParser.printTimeTableWeek(timeTableCurrentWeek)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
|
||||||
uiThread {
|
uiThread {
|
||||||
|
@ -246,11 +316,17 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
t0.get()
|
||||||
t1.get()
|
t1.get()
|
||||||
t2.get()
|
t2.get()
|
||||||
|
|
||||||
|
println("next end:" + timeTableNextWeek.size)
|
||||||
|
println(timeTableNextWeek)
|
||||||
|
timeTableParser.printTimeTableWeek(timeTableNextWeek)
|
||||||
|
println(ls.lessonSubject)
|
||||||
}
|
}
|
||||||
println("Completed in $time ms")
|
println("Completed in $time ms")
|
||||||
|
println(ls.lessonSubject)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getCourseTTLinkList(): ArrayList<CourseTTLink>{
|
fun getCourseTTLinkList(): ArrayList<CourseTTLink>{
|
||||||
|
@ -261,7 +337,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
|
||||||
return timeTableCurrentWeek
|
return timeTableCurrentWeek
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getTimeTableNextWeek(): Array<Array<Lesson>> {
|
fun getTimeTableNextWeek(): Array<Array<Lesson>> {
|
||||||
return timeTableNextWeek
|
return timeTableNextWeek
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -273,4 +349,8 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte
|
||||||
return course
|
return course
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getColorPrimary(): Int {
|
||||||
|
return color
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,13 +130,15 @@ class SettingsFragment : Fragment() {
|
||||||
|
|
||||||
MaterialDialog(context!!)
|
MaterialDialog(context!!)
|
||||||
.title(R.string.primary_color)
|
.title(R.string.primary_color)
|
||||||
.colorChooser(colors, initialSelection = Color.BLACK) { _, color ->
|
.colorChooser(colors, initialSelection = mainActivity.getColorPrimary()) { _, color ->
|
||||||
viewPrimaryColor.setBackgroundColor(color)
|
viewPrimaryColor.setBackgroundColor(color)
|
||||||
Aesthetic.config {
|
Aesthetic.config {
|
||||||
colorPrimary(color)
|
colorPrimary(color)
|
||||||
colorPrimaryDark(color)
|
colorPrimaryDark(color)
|
||||||
apply()
|
apply()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mainActivity.saveColorPrimary(color)
|
||||||
}
|
}
|
||||||
.positiveButton(R.string.select)
|
.positiveButton(R.string.select)
|
||||||
.show()
|
.show()
|
||||||
|
|
|
@ -35,6 +35,7 @@ import org.mosad.seil0.projectlaogai.MainActivity
|
||||||
import org.mosad.seil0.projectlaogai.R
|
import org.mosad.seil0.projectlaogai.R
|
||||||
import org.mosad.seil0.projectlaogai.hsoparser.DataTypes
|
import org.mosad.seil0.projectlaogai.hsoparser.DataTypes
|
||||||
import org.mosad.seil0.projectlaogai.hsoparser.NotRetardedCalendar
|
import org.mosad.seil0.projectlaogai.hsoparser.NotRetardedCalendar
|
||||||
|
import org.mosad.seil0.projectlaogai.hsoparser.TimeTableParser
|
||||||
import org.mosad.seil0.projectlaogai.uicomponents.LessonCardView
|
import org.mosad.seil0.projectlaogai.uicomponents.LessonCardView
|
||||||
import org.mosad.seil0.projectlaogai.uicomponents.MensaDayCardView
|
import org.mosad.seil0.projectlaogai.uicomponents.MensaDayCardView
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
|
@ -72,6 +73,9 @@ class TimeTableFragment : Fragment() {
|
||||||
val formatter = SimpleDateFormat("E dd.MM", Locale.GERMANY) // TODO change to android call when min api is 24
|
val formatter = SimpleDateFormat("E dd.MM", Locale.GERMANY) // TODO change to android call when min api is 24
|
||||||
val calendar = Calendar.getInstance()
|
val calendar = Calendar.getInstance()
|
||||||
|
|
||||||
|
println(mainActivity.getTimeTableCurrentWeek().size)
|
||||||
|
println(mainActivity.getTimeTableNextWeek().size)
|
||||||
|
|
||||||
doAsync {
|
doAsync {
|
||||||
|
|
||||||
uiThread {
|
uiThread {
|
||||||
|
@ -91,11 +95,21 @@ class TimeTableFragment : Fragment() {
|
||||||
lessonCardView.getTxtViewLesson().append(lesson.lessonRoom)
|
lessonCardView.getTxtViewLesson().append(lesson.lessonRoom)
|
||||||
lessonCardView.getTxtViewTime().text = DataTypes().getTime()[i]
|
lessonCardView.getTxtViewTime().text = DataTypes().getTime()[i]
|
||||||
|
|
||||||
|
// only add the lesson if it contains data
|
||||||
if(lessonCardView.getTxtViewLesson().text.length > 2)
|
if(lessonCardView.getTxtViewLesson().text.length > 2)
|
||||||
cardViewTimeTableDay.getLinLayoutMensaDay().addView(lessonCardView)
|
cardViewTimeTableDay.getLinLayoutMensaDay().addView(lessonCardView)
|
||||||
}
|
}
|
||||||
|
|
||||||
calendar.add(Calendar.DATE,1)
|
calendar.add(Calendar.DATE,1)
|
||||||
|
|
||||||
|
// if the day contains no lessons add a text "No lesson today"
|
||||||
|
if (cardViewTimeTableDay.getLinLayoutMensaDay().childCount <= 1) {
|
||||||
|
val lessonCardView = LessonCardView(context!!, null)
|
||||||
|
lessonCardView.setBackgroundColor(Color.TRANSPARENT)
|
||||||
|
lessonCardView.getTxtViewLesson().text = resources.getString(R.string.no_lesson_today)
|
||||||
|
cardViewTimeTableDay.getLinLayoutMensaDay().addView(lessonCardView)
|
||||||
|
}
|
||||||
|
|
||||||
linLayoutTTFragment.addView(cardViewTimeTableDay)
|
linLayoutTTFragment.addView(cardViewTimeTableDay)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,6 +122,9 @@ class TimeTableFragment : Fragment() {
|
||||||
val cardViewTimeTableDay = MensaDayCardView(context!!, null)
|
val cardViewTimeTableDay = MensaDayCardView(context!!, null)
|
||||||
cardViewTimeTableDay.setDayHeading(formatter.format(calendar.time))
|
cardViewTimeTableDay.setDayHeading(formatter.format(calendar.time))
|
||||||
|
|
||||||
|
//val ttp = TimeTableParser()
|
||||||
|
//ttp.printTimeTableWeek(mainActivity.getTimeTableNextWeek())
|
||||||
|
|
||||||
// for each lessen of the day
|
// for each lessen of the day
|
||||||
for((i, lesson) in mainActivity.getTimeTableNextWeek()[day].withIndex()) {
|
for((i, lesson) in mainActivity.getTimeTableNextWeek()[day].withIndex()) {
|
||||||
val lessonCardView = LessonCardView(context!!, null)
|
val lessonCardView = LessonCardView(context!!, null)
|
||||||
|
|
|
@ -137,7 +137,7 @@
|
||||||
<View
|
<View
|
||||||
android:layout_width="40dp"
|
android:layout_width="40dp"
|
||||||
android:layout_height="40dp" android:id="@+id/view_PrimaryColor"
|
android:layout_height="40dp" android:id="@+id/view_PrimaryColor"
|
||||||
android:background="@color/colorPrimary"/>
|
android:background="?colorPrimary"/>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
|
@ -4,14 +4,15 @@
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="@dimen/nav_header_height"
|
android:layout_height="@dimen/nav_header_height"
|
||||||
android:background="?colorPrimary"
|
android:background="@color/colorPrimary"
|
||||||
android:paddingBottom="@dimen/activity_vertical_margin"
|
android:paddingBottom="@dimen/activity_vertical_margin"
|
||||||
android:paddingLeft="@dimen/activity_horizontal_margin"
|
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||||
android:paddingTop="@dimen/activity_vertical_margin"
|
android:paddingTop="@dimen/activity_vertical_margin"
|
||||||
android:theme="@style/ThemeOverlay.AppCompat.Dark"
|
android:theme="@style/ThemeOverlay.AppCompat.Dark"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:gravity="bottom">
|
android:gravity="bottom"
|
||||||
|
android:id="@+id/nav_header_main">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
<string name="no_meal_today">heute keine Essensausgabe</string>
|
<string name="no_meal_today">heute keine Essensausgabe</string>
|
||||||
<string name="no_meal_tomorrow">morgen keine Essensausgabe</string>
|
<string name="no_meal_tomorrow">morgen keine Essensausgabe</string>
|
||||||
<string name="no_more_food">Diese Woche keine weitere Essensausgabe</string>
|
<string name="no_more_food">Diese Woche keine weitere Essensausgabe</string>
|
||||||
<string name="no_lesson_today">heute keine Vorlesung</string>
|
<string name="no_lesson_today">heute keine Vorlesung!</string>
|
||||||
<string name="error">Fehler</string>
|
<string name="error">Fehler</string>
|
||||||
<string name="no_tt_error">Stundenplan konnte nicht geladen werden!</string>
|
<string name="no_tt_error">Stundenplan konnte nicht geladen werden!</string>
|
||||||
<string name="gen_tt_error">Allgemeiner Stundenplan Fehler!"</string>
|
<string name="gen_tt_error">Allgemeiner Stundenplan Fehler!"</string>
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
<string name="no_meal_tomorrow">Mensa closed tomorrow</string>
|
<string name="no_meal_tomorrow">Mensa closed tomorrow</string>
|
||||||
<string name="no_more_food">No more Food this week</string>
|
<string name="no_more_food">No more Food this week</string>
|
||||||
|
|
||||||
<string name="no_lesson_today">"no lecture today "</string>
|
<string name="no_lesson_today">"No lecture today!"</string>
|
||||||
<string name="error">Error</string>
|
<string name="error">Error</string>
|
||||||
<string name="no_tt_error">Could not load timetable!"</string>
|
<string name="no_tt_error">Could not load timetable!"</string>
|
||||||
<string name="gen_tt_error">There was an error with the timetable!"</string>
|
<string name="gen_tt_error">There was an error with the timetable!"</string>
|
||||||
|
@ -51,4 +51,5 @@
|
||||||
|
|
||||||
<string name="save_key_course" translatable="false">org.mosad.seil0.projectlaogai.course</string>
|
<string name="save_key_course" translatable="false">org.mosad.seil0.projectlaogai.course</string>
|
||||||
<string name="save_key_courseTTLink" translatable="false">org.mosad.seil0.projectlaogai.courseTTLink</string>
|
<string name="save_key_courseTTLink" translatable="false">org.mosad.seil0.projectlaogai.courseTTLink</string>
|
||||||
|
<string name="save_key_colorPrimary" translatable="false">org.mosad.seil0.projectlaogai.colorPrimary</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in New Issue