1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-11-03 17:02:13 +01:00
Gadgetbridge/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/GBChangeLog.java
Arjan Schrijver 43fddd0110 Dashboard view (#3478)
This adds a new dashboard-type view to Gadgetbridge. The new dashboard activity displays several widgets with aggregated statistics from multiple devices. New preferences are added to allow configuration of the dashboard and its widgets. A new bottom navigation bar is added to switch between the Dashboard and Devices views.

Some issues that prompted this feature and provided inspiration for the implementation:
- https://codeberg.org/Freeyourgadget/Gadgetbridge/issues/301 (More Intuitive User Interface)
- https://codeberg.org/Freeyourgadget/Gadgetbridge/issues/3074 (Ability to merge historical data from several devices)

Reviewed-on: https://codeberg.org/Freeyourgadget/Gadgetbridge/pulls/3478
Reviewed-by: José Rebelo <joserebelo@noreply.codeberg.org>
Co-authored-by: Arjan Schrijver <a_gadgetbridge@anymore.nl>
Co-committed-by: Arjan Schrijver <a_gadgetbridge@anymore.nl>
2024-04-04 19:28:04 +00:00

116 lines
4.2 KiB
Java

/* Copyright (C) 2023-2024 José Rebelo
This file is part of Gadgetbridge.
Gadgetbridge is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Gadgetbridge is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
package nodomain.freeyourgadget.gadgetbridge.util;
import android.content.Context;
import android.content.DialogInterface;
import android.util.SparseArray;
import android.webkit.WebView;
import androidx.appcompat.app.AlertDialog;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import de.cketti.library.changelog.ChangeLog;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
import nodomain.freeyourgadget.gadgetbridge.R;
public class GBChangeLog extends ChangeLog {
private static final Logger LOG = LoggerFactory.getLogger(GBChangeLog.class);
public GBChangeLog(Context context, String css) {
super(context, css);
}
@Override
protected SparseArray<ReleaseItem> getMasterChangeLog(boolean full) {
if (GBApplication.isNightly()) {
try {
return readChangeLogFromResource(R.xml.changelog_git, full);
} catch (final Exception e) {
// Just in case the git changelog is broken somehow..
LOG.error("Failed to read git changelog for nightly", e);
}
}
return super.getMasterChangeLog(full);
}
public AlertDialog getMaterialLogDialog() {
return getMaterialDialog(isFirstRunEver());
}
public AlertDialog getMaterialFullLogDialog() {
return getMaterialDialog(true);
}
/**
* Checks whether there are changes to display.
*/
public boolean hasChanges(final boolean full) {
return !getChangeLog(full).isEmpty();
}
protected AlertDialog getMaterialDialog(boolean full) {
WebView wv = new WebView(mContext);
wv.setBackgroundColor(0); // transparent
wv.loadDataWithBaseURL(null, getLog(full), "text/html", "UTF-8", null);
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(mContext);
builder.setTitle(
mContext.getResources().getString(
full ? R.string.changelog_full_title : R.string.changelog_title))
.setView(wv)
.setCancelable(false)
// OK button
.setPositiveButton(
mContext.getResources().getString(R.string.changelog_ok_button),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// The user clicked "OK" so save the current version code as
// "last version code".
updateVersionInPreferences();
}
});
if (!full) {
// Show "More…" button if we're only displaying a partial change log.
builder.setNegativeButton(R.string.changelog_show_full,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
getMaterialFullLogDialog().show();
}
});
}
return builder.create();
}
public static GBChangeLog createChangeLog(Context context) {
String css = GBChangeLog.DEFAULT_CSS;
css += "body { "
+ "color: " + AndroidUtils.getTextColorHex(context) + "; "
+ "}";
return new GBChangeLog(context, css);
}
}