forked from github/szkolny
[UI/Changelog] Add new changelog dialog. Update for v4.0-beta.1
This commit is contained in:
parent
868e529e62
commit
f350a86946
@ -1,53 +1,37 @@
|
||||
<html>
|
||||
<head>
|
||||
<style type="text/css">
|
||||
* {
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #{bg-color}; color: #{text-color};
|
||||
}
|
||||
|
||||
a {
|
||||
color: #{link-color};
|
||||
}
|
||||
|
||||
a:active {
|
||||
color: #{link-color-active};
|
||||
}
|
||||
|
||||
ol {
|
||||
list-style-position: inside;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
li:not(:first-child) {
|
||||
padding-top: 8px;
|
||||
}
|
||||
</style>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h3>Wersja 4.0, 2019-jeszcze-nie-wiem-kiedy</h3>
|
||||
<h3>Wersja 4.0-beta.1, 2019-12-31</h3>
|
||||
<ul>
|
||||
<li>UWAGA. To jest wersja in-development. Wiele funkcji może nie działać prawidłowo (lub wcale), co oznacza tylko że nie zostały jeszcze przeniesione
|
||||
z wersji 3.x. Proszę o cierpliwość oraz <b>nie udostępnianie</b> tej wersji <u>nikomu</u>.</li>
|
||||
<li>Bardzo dużo zmian</li>
|
||||
<li><b>Przebudowaliśmy cały moduł synchronizacji</b>, co oznacza większą stabilność aplikacji, szybkosć oraz poprawność pobieranych danych.</li>
|
||||
<li>Udoskonalony wygląd Szkolnego - sprawi, że korzystanie z aplikacji będzie jeszcze przyjemniejsze</li>
|
||||
<li>Nowa <b>Strona główna</b> - ładniejszy wygląd oraz możliwość przestawiania kart na każdym profilu</li>
|
||||
<li>Nowy <b>Plan lekcji</b> - z doskonałą obsługą lekcji przesuniętych oraz dwóch lekcji o tej samej godzinie</li>
|
||||
<li>Nowe okienka informacji o wydarzeniach oraz lekcjach</li>
|
||||
<li>Łatwiejsze dodawanie własnych wydarzeń</li>
|
||||
<li>Dużo poprawek w widoku <b>Wiadomości</b> oraz <b>Ogłoszeń</b></li>
|
||||
<li>Librus: opcja logowania w dziennikach <b>Jednostek Samorządu Terytorialnego</b> oraz <b>Oświata w Radomiu</b></li>
|
||||
<li>Librus: obsługa Zadań domowych bez posiadania Mobilnych dodatków (przez system Synergia)</li>
|
||||
<li>Lepsze <b>przekazywanie powiadomień na komputer</b> oraz łatwiejsze parowanie</li>
|
||||
<li>Poprawiliśmy synchronizację w tle na niektórych telefonach</li>
|
||||
<li>Znaczna ilość błędów z poprzednich wersji już nie występuje</li>
|
||||
</ul>
|
||||
|
||||
<!--<i>
|
||||
<h3>Plany na następne wersje:</h3>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<b>Uwaga.</b> Ponieważ to wersja <i>beta</i>, niektóre funkcje mogą nie działać prawidłowo.<br>
|
||||
Staramy się usuwać takie przypadki, jednak na chwilę obecną mogą występować błędy w:
|
||||
<ul>
|
||||
<li>Widget kalendarza ze sprawdzianami, ulepszenie widoku kalendarza w aplikacji</li>
|
||||
<li>Wsparcie dla systemu Synergia w jednostkach samorządu terytorialnego - aplikacja Nasze Szkoły</li>
|
||||
<li>Wsparcie dla Librusa w systemie Oświata w Radomiu</li>
|
||||
<li>EduDziennik</li>
|
||||
<li>Mobireg</li>
|
||||
<li>Możliwość edycji planu lekcji</li>
|
||||
<li>Widget powiadomień</li>
|
||||
<li>Zgłaszanie błędów</li>
|
||||
<li>Terminarz - brak informacji o odwołanych lekcjach w dialogu</li>
|
||||
<li>Obsługa błędów - rzadko występuje</li>
|
||||
<li>Brak generowania blokowego planu lekcji</li>
|
||||
</ul>
|
||||
</i>-->
|
||||
|
||||
</body>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
<i>Okazja ograniczona czasowo:</i> Poczuj prawdziwą zimę, włączając w Ustawieniach widok padającego śniegu!
|
||||
<br>
|
||||
<br>
|
||||
<br>
|
||||
Dzięki za korzystanie ze Szkolnego!<br>
|
||||
<i>© Kuba Szczodrzyński, Kacper Ziubryniewicz 2019</i>
|
||||
|
@ -9,7 +9,10 @@ import android.content.IntentFilter
|
||||
import android.content.pm.PackageManager
|
||||
import android.graphics.BitmapFactory
|
||||
import android.graphics.drawable.BitmapDrawable
|
||||
import android.os.*
|
||||
import android.os.AsyncTask
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.Environment
|
||||
import android.provider.Settings
|
||||
import android.util.Log
|
||||
import android.view.Gravity
|
||||
@ -36,13 +39,11 @@ import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
import pl.droidsonroids.gif.GifDrawable
|
||||
import pl.szczodrzynski.edziennik.App.APP_URL
|
||||
import pl.szczodrzynski.edziennik.data.api.events.*
|
||||
import pl.szczodrzynski.edziennik.data.api.szkolny.interceptor.Signing
|
||||
import pl.szczodrzynski.edziennik.data.api.task.EdziennikTask
|
||||
import pl.szczodrzynski.edziennik.data.db.modules.metadata.Metadata.*
|
||||
import pl.szczodrzynski.edziennik.databinding.ActivitySzkolnyBinding
|
||||
import pl.szczodrzynski.edziennik.network.ServerRequest
|
||||
import pl.szczodrzynski.edziennik.sync.AppManagerDetectedEvent
|
||||
import pl.szczodrzynski.edziennik.sync.SyncWorker
|
||||
import pl.szczodrzynski.edziennik.ui.dialogs.changelog.ChangelogDialog
|
||||
@ -426,16 +427,7 @@ class MainActivity : AppCompatActivity() {
|
||||
|
||||
// WHAT'S NEW DIALOG
|
||||
if (app.config.appVersion < BuildConfig.VERSION_CODE) {
|
||||
ServerRequest(app, app.requestScheme + APP_URL + "main.php?just_updated", "MainActivity/JU")
|
||||
.run { e, result ->
|
||||
Handler(Looper.getMainLooper()).post {
|
||||
try {
|
||||
ChangelogDialog().show(supportFragmentManager, "whats_new")
|
||||
} catch (e2: Exception) {
|
||||
e2.printStackTrace()
|
||||
}
|
||||
}
|
||||
}
|
||||
ChangelogDialog(this)
|
||||
if (app.config.appVersion < 170) {
|
||||
//Intent intent = new Intent(this, ChangelogIntroActivity.class);
|
||||
//startActivity(intent);
|
||||
|
@ -1,92 +0,0 @@
|
||||
package pl.szczodrzynski.edziennik.ui.dialogs.changelog;
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.os.Bundle;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.fragment.app.DialogFragment;
|
||||
import android.view.InflateException;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.webkit.WebView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.afollestad.materialdialogs.MaterialDialog;
|
||||
import com.afollestad.materialdialogs.Theme;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
import pl.szczodrzynski.edziennik.App;
|
||||
import pl.szczodrzynski.edziennik.R;
|
||||
import pl.szczodrzynski.edziennik.utils.Themes;
|
||||
|
||||
import static pl.szczodrzynski.edziennik.utils.Utils.hexFromColorInt;
|
||||
import static pl.szczodrzynski.navlib.UtilsKt.getColorFromAttr;
|
||||
|
||||
public class ChangelogDialog extends DialogFragment {
|
||||
|
||||
private String charsetName = "UTF-8";
|
||||
|
||||
private int getColor(int resId)
|
||||
{
|
||||
return getContext().getResources().getColor(resId);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
assert getContext() != null;
|
||||
assert getActivity() != null;
|
||||
App app = (App)getContext().getApplicationContext();
|
||||
final View customView;
|
||||
try {
|
||||
customView = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_changelog, null);
|
||||
} catch (InflateException e) {
|
||||
Toast.makeText(getContext(), "This device does not support WebViews.", Toast.LENGTH_SHORT).show();
|
||||
return null;
|
||||
}
|
||||
boolean darkTheme = Themes.INSTANCE.isDark();
|
||||
|
||||
MaterialDialog dialog =
|
||||
new MaterialDialog.Builder(getActivity())
|
||||
.theme(darkTheme ? Theme.DARK : Theme.LIGHT)
|
||||
.title(R.string.whats_new)
|
||||
.customView(customView, true)
|
||||
.positiveText(android.R.string.ok)
|
||||
.build();
|
||||
|
||||
WebView webView = customView.findViewById(R.id.webview);
|
||||
try {
|
||||
|
||||
// Load from changelog.html in the assets folder
|
||||
StringBuilder buf = new StringBuilder();
|
||||
InputStream json = getActivity().getAssets().open(getContext().getString(R.string.prefix)+"-changelog.html");
|
||||
BufferedReader in = new BufferedReader(new InputStreamReader(json, charsetName));
|
||||
String str;
|
||||
while ((str = in.readLine()) != null) {
|
||||
buf.append(str);
|
||||
}
|
||||
in.close();
|
||||
|
||||
// Inject color values for WebView body background and links
|
||||
webView.loadDataWithBaseURL(null,
|
||||
buf.toString()
|
||||
.replace("{bg-color}", hexFromColorInt(darkTheme ? 0x424242 : 0xffffff))
|
||||
.replace("{text-color}", colorToHex(getColorFromAttr(getContext(), android.R.attr.textColorPrimary)))
|
||||
.replace("{secondary-color}", colorToHex(getColorFromAttr(getContext(), android.R.attr.textColorSecondary)))
|
||||
.replace("{link-color}", colorToHex(getColorFromAttr(getContext(), R.attr.colorAccent)))
|
||||
.replace("{link-color-active}", colorToHex(getColorFromAttr(getContext(), R.attr.colorPrimaryDark))),
|
||||
"text/html",
|
||||
charsetName, null);
|
||||
} catch (Throwable e) {
|
||||
webView.loadData(
|
||||
"<h1>Unable to load</h1><p>" + e.getLocalizedMessage() + "</p>", "text/html", charsetName);
|
||||
}
|
||||
return dialog;
|
||||
}
|
||||
|
||||
private String colorToHex(int color) {
|
||||
return Integer.toHexString(color).substring(2);
|
||||
}
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Copyright (c) Kuba Szczodrzyński 2019-12-30.
|
||||
*/
|
||||
|
||||
package pl.szczodrzynski.edziennik.ui.dialogs.changelog
|
||||
|
||||
import android.text.Html
|
||||
import android.widget.ScrollView
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
import pl.szczodrzynski.edziennik.App
|
||||
import pl.szczodrzynski.edziennik.R
|
||||
import pl.szczodrzynski.edziennik.dp
|
||||
import kotlin.coroutines.CoroutineContext
|
||||
|
||||
class ChangelogDialog(
|
||||
val activity: AppCompatActivity,
|
||||
val onShowListener: ((tag: String) -> Unit)? = null,
|
||||
val onDismissListener: ((tag: String) -> Unit)? = null
|
||||
) : CoroutineScope {
|
||||
companion object {
|
||||
private const val TAG = "ChangelogDialog"
|
||||
}
|
||||
|
||||
private lateinit var app: App
|
||||
private lateinit var dialog: AlertDialog
|
||||
|
||||
private val job = Job()
|
||||
override val coroutineContext: CoroutineContext
|
||||
get() = job + Dispatchers.Main
|
||||
|
||||
init { run {
|
||||
if (activity.isFinishing)
|
||||
return@run
|
||||
onShowListener?.invoke(TAG)
|
||||
app = activity.applicationContext as App
|
||||
val textView = TextView(activity)
|
||||
textView.setPadding(24.dp, 24.dp, 24.dp, 0)
|
||||
|
||||
val text = app.assets.open("pl-changelog.html").bufferedReader().use {
|
||||
it.readText()
|
||||
}
|
||||
textView.text = Html.fromHtml(text)
|
||||
|
||||
val scrollView = ScrollView(activity)
|
||||
scrollView.addView(textView)
|
||||
|
||||
dialog = MaterialAlertDialogBuilder(activity)
|
||||
.setTitle(R.string.whats_new)
|
||||
.setView(scrollView)
|
||||
.setPositiveButton(R.string.close) { dialog, _ ->
|
||||
dialog.dismiss()
|
||||
}
|
||||
.setOnDismissListener {
|
||||
onDismissListener?.invoke(TAG)
|
||||
}
|
||||
.show()
|
||||
}}
|
||||
}
|
@ -1242,7 +1242,7 @@ public class SettingsNewFragment extends MaterialAboutFragment {
|
||||
.icon(CommunityMaterial.Icon2.cmd_radar)
|
||||
.color(IconicsColor.colorInt(primaryTextOnPrimaryBg))
|
||||
.size(IconicsSize.dp(iconSizeDp)))
|
||||
.setOnClickAction(() -> new ChangelogDialog().show(getActivity().getSupportFragmentManager(), "whats_new"))
|
||||
.setOnClickAction(() -> new ChangelogDialog(activity, null, null))
|
||||
.build());
|
||||
|
||||
items.add(new MaterialAboutActionItem.Builder()
|
||||
|
Loading…
x
Reference in New Issue
Block a user