szkolny/app/src/main/java/pl/szczodrzynski/edziennik/fragments/SettingsNewFragment.java

1495 lines
78 KiB
Java
Raw Normal View History

package pl.szczodrzynski.edziennik.fragments;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import android.widget.Toast;
import com.afollestad.materialdialogs.MaterialDialog;
import com.danielstone.materialaboutlibrary.ConvenienceBuilder;
import com.danielstone.materialaboutlibrary.MaterialAboutFragment;
import com.danielstone.materialaboutlibrary.items.MaterialAboutActionItem;
import com.danielstone.materialaboutlibrary.items.MaterialAboutActionSwitchItem;
import com.danielstone.materialaboutlibrary.items.MaterialAboutItem;
import com.danielstone.materialaboutlibrary.items.MaterialAboutItemOnClickAction;
import com.danielstone.materialaboutlibrary.items.MaterialAboutProfileItem;
import com.danielstone.materialaboutlibrary.items.MaterialAboutSwitchItem;
import com.danielstone.materialaboutlibrary.items.MaterialAboutTitleItem;
import com.danielstone.materialaboutlibrary.model.MaterialAboutCard;
import com.danielstone.materialaboutlibrary.model.MaterialAboutList;
import com.mikepenz.iconics.IconicsColor;
import com.mikepenz.iconics.IconicsDrawable;
import com.mikepenz.iconics.IconicsSize;
import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial;
import com.theartofdev.edmodo.cropper.CropImage;
import com.theartofdev.edmodo.cropper.CropImageView;
import com.wdullaer.materialdatetimepicker.time.TimePickerDialog;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import pl.szczodrzynski.edziennik.App;
import pl.szczodrzynski.edziennik.BuildConfig;
import pl.szczodrzynski.edziennik.Notifier;
import pl.szczodrzynski.edziennik.R;
import pl.szczodrzynski.edziennik.MainActivity;
import pl.szczodrzynski.edziennik.activities.SettingsLicenseActivity;
import pl.szczodrzynski.edziennik.activities.WebPushConfigActivity;
import pl.szczodrzynski.edziennik.dialogs.ChangelogDialog;
import pl.szczodrzynski.edziennik.models.Endpoint;
import pl.szczodrzynski.edziennik.models.Time;
import pl.szczodrzynski.edziennik.network.NetworkUtils;
import pl.szczodrzynski.edziennik.network.ServerRequest;
import pl.szczodrzynski.edziennik.receivers.BootReceiver;
import pl.szczodrzynski.edziennik.sync.SyncJob;
import pl.szczodrzynski.edziennik.utils.Themes;
import pl.szczodrzynski.edziennik.utils.Utils;
import static android.app.Activity.RESULT_OK;
import static pl.szczodrzynski.edziennik.App.APP_URL;
import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_DISABLED;
import static pl.szczodrzynski.edziennik.datamodels.Profile.REGISTRATION_ENABLED;
import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_AVG_2_AVG;
import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_AVG_2_SEM;
import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_SEM_2_AVG;
import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_1_SEM_2_SEM;
import static pl.szczodrzynski.edziennik.datamodels.Profile.YEAR_ALL_GRADES;
import static pl.szczodrzynski.edziennik.utils.Utils.d;
import static pl.szczodrzynski.edziennik.utils.Utils.getRealPathFromURI;
import static pl.szczodrzynski.edziennik.utils.Utils.getResizedBitmap;
public class SettingsNewFragment extends MaterialAboutFragment {
private static final String TAG = "Settings";
private App app = null;
private MainActivity activity;
private static final int CARD_PROFILE = 0;
private static final int CARD_THEME = 1;
private static final int CARD_SYNC = 2;
private static final int CARD_REGISTER = 3;
private static final int CARD_SYNC_CUSTOMIZE = 4;
private static final int CARD_ABOUT = 5;
private int iconColor = Color.WHITE;
private int primaryTextOnPrimaryBg = -1;
private int secondaryTextOnPrimaryBg = -1;
private int iconSizeDp = 20;
private MaterialAboutCard getCardWithItems(CharSequence title, ArrayList<MaterialAboutItem> items, boolean primaryColor) {
MaterialAboutCard card = new MaterialAboutCard.Builder().title(title).cardColor(0xff1976D2).build();
card.getItems().addAll(items);
return card;
}
private MaterialAboutCard getCardWithItems(CharSequence title, ArrayList<MaterialAboutItem> items) {
MaterialAboutCard card = new MaterialAboutCard.Builder().title(title).cardColor(Utils.getAttr(activity, R.attr.mal_card_background)).build();
card.getItems().addAll(items);
return card;
}
private void addCardItems(int cardIndex, ArrayList<MaterialAboutItem> itemsNew) {
ArrayList<MaterialAboutItem> items = getList().getCards().get(cardIndex).getItems();
items.remove(items.size() - 1);
items.addAll(itemsNew);
refreshMaterialAboutList();
}
private void addCardItem(int cardIndex, int itemIndex, MaterialAboutItem item) {
ArrayList<MaterialAboutItem> items = getList().getCards().get(cardIndex).getItems();
items.add(itemIndex, item);
refreshMaterialAboutList();
}
private void removeCardItem(int cardIndex, int itemIndex) {
ArrayList<MaterialAboutItem> items = getList().getCards().get(cardIndex).getItems();
items.remove(itemIndex);
refreshMaterialAboutList();
}
private MaterialAboutActionItem getMoreItem(MaterialAboutItemOnClickAction onClickAction) {
return new MaterialAboutActionItem(
getString(R.string.settings_more_text),
null,
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_chevron_down)
.size(IconicsSize.dp(14))
.color(IconicsColor.colorInt(iconColor)),
onClickAction
);
}
/* _____ __ _ _
| __ \ / _(_) |
| |__) | __ ___ | |_ _| | ___
| ___/ '__/ _ \| _| | |/ _ \
| | | | | (_) | | | | | __/
|_| |_| \___/|_| |_|_|\__*/
private Drawable getProfileDrawable() {
return app.profile.getImageDrawable(activity);
/*Bitmap profileImage = null;
if (app.profile.getImage() != null && !app.profile.getImage().equals("")) {
profileImage = BitmapFactory.decodeFile(app.profile.getImage());
RoundedBitmapDrawable roundDrawable = RoundedBitmapDrawableFactory.create(getResources(), profileImage);
roundDrawable.setCircular(true);
return roundDrawable;
}
return getDrawableFromRes(getContext(), R.drawable.profile);*/
/*if (profileImage == null) {
profileImage = BitmapFactory.decodeResource(getResources(), R.drawable.profile);
}
profileImage = ThumbnailUtils.extractThumbnail(profileImage, Math.min(profileImage.getWidth(), profileImage.getHeight()), Math.min(profileImage.getWidth(), profileImage.getHeight()));
RoundedBitmapDrawable roundDrawable = RoundedBitmapDrawableFactory.create(getResources(), profileImage);
roundDrawable.setCircular(true);
return roundDrawable;*/
}
private MaterialAboutProfileItem profileCardTitleItem;
private ArrayList<MaterialAboutItem> getProfileCard(boolean expandedOnly) {
ArrayList<MaterialAboutItem> items = new ArrayList<>();
if (!expandedOnly) {
profileCardTitleItem = new MaterialAboutProfileItem(
app.profile.getName(),
getString(R.string.settings_profile_subtitle_format, app.profile.getSubname()),
getProfileDrawable()
);
profileCardTitleItem.setOnClickAction(() -> {
new MaterialDialog.Builder(activity)
.title(R.string.settings_profile_change_title)
.items(
getString(R.string.settings_profile_change_name),
getString(R.string.settings_profile_change_image),
app.profile.getImage() == null ? null : getString(R.string.settings_profile_remove_image)
)
.itemsCallback((dialog, itemView, position, text) -> {
switch (position) {
case 0:
new MaterialDialog.Builder(activity)
.title(getString(R.string.settings_profile_change_name_dialog_title))
.input(getString(R.string.settings_profile_change_name_dialog_text), app.profile.getName(), (dialog1, input) -> {
app.profile.setName(input.toString());
profileCardTitleItem.setText(input);
profileCardTitleItem.setIcon(getProfileDrawable());
refreshMaterialAboutList();
app.profileSaveAsync();
})
.positiveText(R.string.ok)
.negativeText(R.string.cancel)
.show();
break;
case 1:
startActivityForResult(CropImage.getPickImageChooserIntent(activity), 21);
break;
case 2:
app.profile.setImage(null);
profileCardTitleItem.setIcon(getProfileDrawable());
refreshMaterialAboutList();
app.profileSaveAsync();
break;
}
})
.negativeText(R.string.cancel)
.show();
});
items.add(profileCardTitleItem);
/*items.add(
new MaterialAboutActionItem(
getString(R.string.settings_profile_change_password_text),
getString(R.string.settings_profile_change_password_subtext),
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_key_variant)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
)
.setOnClickAction(() -> {
})
);*/
items.add(
new MaterialAboutSwitchItem(
getString(R.string.settings_profile_sync_text),
getString(R.string.settings_profile_sync_subtext),
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_account_convert)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
)
.setChecked(app.profile.getSyncEnabled())
.setOnChangeAction(((isChecked, tag) -> {
app.profile.setSyncEnabled(isChecked);
app.profileSaveAsync();
return true;
}))
);
items.add(getMoreItem(() -> addCardItems(CARD_PROFILE, getProfileCard(true))));
}
else {
items.add(
new MaterialAboutSwitchItem(
getString(R.string.settings_profile_notify_text),
getString(R.string.settings_profile_notify_subtext),
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_bell_ring)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
)
.setChecked(app.profile.getSyncNotifications())
.setOnChangeAction(((isChecked, tag) -> {
app.profile.setSyncNotifications(isChecked);
app.profileSaveAsync();
return true;
}))
);
items.add(
new MaterialAboutActionItem(
getString(R.string.settings_profile_remove_text),
getString(R.string.settings_profile_remove_subtext),
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_delete_empty)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
)
.setOnClickAction(() -> {
app.apiEdziennik.guiRemoveProfile(activity, app.profile.getId(), app.profile.getName());
})
);
}
return items;
}
/* _______ _
|__ __| |
| | | |__ ___ _ __ ___ ___
| | | '_ \ / _ \ '_ ` _ \ / _ \
| | | | | | __/ | | | | | __/
|_| |_| |_|\___|_| |_| |_|\__*/
private ArrayList<MaterialAboutItem> getThemeCard(boolean expandedOnly) {
ArrayList<MaterialAboutItem> items = new ArrayList<>();
if (!expandedOnly) {
items.add(
new MaterialAboutActionItem(
getString(R.string.settings_theme_theme_text),
Themes.INSTANCE.getThemeName(activity),
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_palette)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
)
.setOnClickAction(() -> {
new MaterialDialog.Builder(activity)
.title(R.string.settings_theme_theme_text)
.items(Themes.INSTANCE.getThemeNames(activity))
.itemsCallbackSingleChoice(app.appConfig.appTheme, (dialog, itemView, which, text) -> {
if (app.appConfig.appTheme == which)
return true;
app.appConfig.appTheme = which;
Themes.INSTANCE.setThemeInt(app.appConfig.appTheme);
app.saveConfig("appTheme");
activity.recreate();
return true;
})
.show();
})
);
items.add(
new MaterialAboutSwitchItem(
getString(R.string.settings_theme_mini_drawer_text),
getString(R.string.settings_theme_mini_drawer_subtext),
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_chevron_left)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
)
.setChecked(app.appConfig.miniDrawerVisible)
.setOnChangeAction((isChecked, tag) -> {
// 0,1 1
// 0,0 0
// 1,1 0
// 1,0 1
app.appConfig.miniDrawerVisible = isChecked;
app.saveConfig("miniDrawerVisible");
activity.getNavView().drawer.setMiniDrawerVisiblePortrait(isChecked);
return true;
})
);
items.add(getMoreItem(() -> addCardItems(CARD_THEME, getThemeCard(true))));
}
else {
items.add(
new MaterialAboutActionItem(
getString(R.string.settings_theme_mini_drawer_buttons_text),
null,
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_menu)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
)
.setOnClickAction(() -> {
List<Integer> buttonIds = new ArrayList<>();
buttonIds.add(MainActivity.DRAWER_ITEM_HOME);
buttonIds.add(MainActivity.DRAWER_ITEM_TIMETABLE);
buttonIds.add(MainActivity.DRAWER_ITEM_AGENDA);
buttonIds.add(MainActivity.DRAWER_ITEM_GRADES);
buttonIds.add(MainActivity.DRAWER_ITEM_MESSAGES);
buttonIds.add(MainActivity.DRAWER_ITEM_HOMEWORKS);
buttonIds.add(MainActivity.DRAWER_ITEM_NOTICES);
buttonIds.add(MainActivity.DRAWER_ITEM_ATTENDANCES);
buttonIds.add(MainActivity.DRAWER_ITEM_ANNOUNCEMENTS);
buttonIds.add(MainActivity.DRAWER_ITEM_NOTIFICATIONS);
buttonIds.add(MainActivity.DRAWER_ITEM_SETTINGS);
//buttonIds.add(MainActivity.DRAWER_ITEM_DEBUG);
List<String> buttonCaptions = new ArrayList<>();
buttonCaptions.add(getString(R.string.menu_home_page));
buttonCaptions.add(getString(R.string.menu_timetable));
buttonCaptions.add(getString(R.string.menu_agenda));
buttonCaptions.add(getString(R.string.menu_grades));
buttonCaptions.add(getString(R.string.menu_messages));
buttonCaptions.add(getString(R.string.menu_homework));
buttonCaptions.add(getString(R.string.menu_notices));
buttonCaptions.add(getString(R.string.menu_attendances));
buttonCaptions.add(getString(R.string.menu_announcements));
buttonCaptions.add(getString(R.string.menu_notifications));
buttonCaptions.add(getString(R.string.menu_settings));
//buttonCaptions.add(getString(R.string.title_debugging));
List<Integer> selectedIds = new ArrayList<>();
for (int id: app.appConfig.miniDrawerButtonIds) {
selectedIds.add(buttonIds.indexOf(id));
}
new MaterialDialog.Builder(activity)
.title(R.string.settings_theme_mini_drawer_buttons_dialog_title)
.content(getString(R.string.settings_theme_mini_drawer_buttons_dialog_text))
.items(buttonCaptions)
.itemsCallbackMultiChoice(selectedIds.toArray(new Integer[0]), (dialog, which, text) -> {
app.appConfig.miniDrawerButtonIds.clear();
for (int index: which) {
if (index == -1)
continue;
// wtf
int id = buttonIds.get(index);
app.appConfig.miniDrawerButtonIds.add(id);
}
app.saveConfig("miniDrawerButtonIds");
activity.setDrawerItems();
activity.getDrawer().updateBadges();
return true;
})
.positiveText(R.string.ok)
.show();
})
);
items.add(
new MaterialAboutActionItem(
getString(R.string.settings_theme_drawer_header_text),
null,
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_image)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
)
.setOnClickAction(() -> {
if (app.appConfig.headerBackground != null) {
new MaterialDialog.Builder(activity)
.title(R.string.what_do_you_want_to_do)
.items(getString(R.string.settings_theme_drawer_header_dialog_set), getString(R.string.settings_theme_drawer_header_dialog_restore))
.itemsCallback((dialog, itemView, position, text) -> {
if (position == 0) {
startActivityForResult(CropImage.getPickImageChooserIntent(activity), 22);
} else {
MainActivity ac = (MainActivity) getActivity();
app.appConfig.headerBackground = null;
if (ac != null) {
ac.getDrawer().setAccountHeaderBackground(null);
ac.getDrawer().open();
}
app.saveConfig("headerBackground");
}
})
.show();
}
else {
startActivityForResult(CropImage.getPickImageChooserIntent(activity), 22);
}
})
);
items.add(
new MaterialAboutActionItem(
getString(R.string.settings_theme_app_background_text),
getString(R.string.settings_theme_app_background_subtext),
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_image_filter_hdr)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
)
.setOnClickAction(() -> {
if (app.appConfig.appBackground != null) {
new MaterialDialog.Builder(activity)
.title(R.string.what_do_you_want_to_do)
.items(getString(R.string.settings_theme_app_background_dialog_set), getString(R.string.settings_theme_app_background_dialog_restore))
.itemsCallback((dialog, itemView, position, text) -> {
if (position == 0) {
startActivityForResult(CropImage.getPickImageChooserIntent(activity), 23);
} else {
app.appConfig.appBackground = null;
app.saveConfig("appBackground");
activity.recreate();
}
})
.show();
}
else {
startActivityForResult(CropImage.getPickImageChooserIntent(activity), 23);
}
})
);
}
return items;
}
/* _____
/ ____|
| (___ _ _ _ __ ___
\___ \| | | | '_ \ / __|
____) | |_| | | | | (__
|_____/ \__, |_| |_|\___|
__/ |
|__*/
private String getSyncCardIntervalSubText() {
if (app.appConfig.registerSyncInterval < 60 * 60)
return getString(
R.string.settings_sync_sync_interval_subtext_format,
HomeFragment.plural(activity, R.plurals.time_till_minutes, app.appConfig.registerSyncInterval / 60)
);
return getString(
R.string.settings_sync_sync_interval_subtext_format,
HomeFragment.plural(activity, R.plurals.time_till_hours, app.appConfig.registerSyncInterval / 60 / 60) +
(app.appConfig.registerSyncInterval / 60 % 60 == 0 ?
"" :
" " + HomeFragment.plural(activity, R.plurals.time_till_minutes, app.appConfig.registerSyncInterval / 60 % 60)
)
);
}
private String getSyncCardQuietHoursSubText() {
return getString(
app.appConfig.quietHoursStart >= app.appConfig.quietHoursEnd ? R.string.settings_sync_quiet_hours_subtext_next_day_format : R.string.settings_sync_quiet_hours_subtext_format,
Time.fromMillis(Math.abs(app.appConfig.quietHoursStart)).getStringHM(),
Time.fromMillis(app.appConfig.quietHoursEnd).getStringHM()
);
}
private MaterialAboutItem getSyncCardWifiItem() {
return new MaterialAboutSwitchItem(
getString(R.string.settings_sync_wifi_text),
getString(R.string.settings_sync_wifi_subtext),
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_wifi_strength_4)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
)
.setChecked(app.appConfig.registerSyncOnlyWifi)
.setOnChangeAction((isChecked, tag) -> {
app.appConfig.registerSyncOnlyWifi = isChecked;
app.saveConfig("registerSyncOnlyWifi");
return true;
});
}
private MaterialAboutActionSwitchItem syncCardIntervalItem;
private MaterialAboutActionSwitchItem syncCardQuietHoursItem;
private ArrayList<MaterialAboutItem> getSyncCard(boolean expandedOnly) {
ArrayList<MaterialAboutItem> items = new ArrayList<>();
if (!expandedOnly) {
syncCardIntervalItem = new MaterialAboutActionSwitchItem(
getString(R.string.settings_sync_sync_interval_text),
getString(R.string.settings_sync_sync_interval_subtext_disabled),
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_sync)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
);
syncCardIntervalItem.setSubTextChecked(getSyncCardIntervalSubText());
syncCardIntervalItem.setChecked(app.appConfig.registerSyncEnabled);
syncCardIntervalItem.setOnClickAction(() -> {
List<CharSequence> intervalNames = new ArrayList<>();
intervalNames.add(HomeFragment.plural(activity, R.plurals.time_till_minutes, 30));
intervalNames.add(HomeFragment.plural(activity, R.plurals.time_till_minutes, 45));
intervalNames.add(HomeFragment.plural(activity, R.plurals.time_till_hours, 1));
intervalNames.add(HomeFragment.plural(activity, R.plurals.time_till_hours, 1)+" "+HomeFragment.plural(activity, R.plurals.time_till_minutes, 30));
intervalNames.add(HomeFragment.plural(activity, R.plurals.time_till_hours, 2));
intervalNames.add(HomeFragment.plural(activity, R.plurals.time_till_hours, 3));
intervalNames.add(HomeFragment.plural(activity, R.plurals.time_till_hours, 4));
List<Integer> intervals = new ArrayList<>();
intervals.add(30 * 60);
intervals.add(45 * 60);
intervals.add(60 * 60);
intervals.add(90 * 60);
intervals.add(120 * 60);
intervals.add(180 * 60);
intervals.add(240 * 60);
new MaterialDialog.Builder(activity)
.title(getString(R.string.settings_sync_sync_interval_dialog_title))
.content(getString(R.string.settings_sync_sync_interval_dialog_text))
.items(intervalNames)
.itemsCallbackSingleChoice(intervals.indexOf(app.appConfig.registerSyncInterval), (dialog, itemView, which, text) -> {
app.appConfig.registerSyncInterval = intervals.get(which);
syncCardIntervalItem.setSubTextChecked(getSyncCardIntervalSubText());
syncCardIntervalItem.setChecked(true);
if (!app.appConfig.registerSyncEnabled) {
addCardItem(CARD_SYNC, 1, getSyncCardWifiItem());
}
else {
refreshMaterialAboutList();
}
app.appConfig.registerSyncEnabled = true;
// app.appConfig modifications have to surround syncCardIntervalItem and those ifs
app.saveConfig("registerSyncInterval", "registerSyncEnabled");
SyncJob.clear();
SyncJob.schedule(app);
return true;
})
.show();
});
syncCardIntervalItem.setOnChangeAction((isChecked, tag) -> {
if (isChecked) {
SyncJob.update(app);
}
else {
SyncJob.clear();
}
if (isChecked && !app.appConfig.registerSyncEnabled) {
addCardItem(CARD_SYNC, 1, getSyncCardWifiItem());
}
else if (!isChecked) {
removeCardItem(CARD_SYNC, 1);
}
app.appConfig.registerSyncEnabled = isChecked;
app.saveConfig("registerSyncEnabled");
return true;
});
items.add(syncCardIntervalItem);
if (app.appConfig.registerSyncEnabled) {
items.add(getSyncCardWifiItem());
}
/* items.add(
new MaterialAboutSwitchItem(
"Cisza na lekcjach",
"Nie odtwarzaj dźwięku powiadomień podczas lekcji",
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_volume_off)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
)
.setChecked(app.appConfig.quietDuringLessons)
.setOnChangeAction((isChecked) -> {
app.appConfig.quietDuringLessons = isChecked;
app.saveConfig("quietDuringLessons");
return true;
})
);*/
syncCardQuietHoursItem = new MaterialAboutActionSwitchItem(
getString(R.string.settings_sync_quiet_hours_text),
getString(R.string.settings_sync_quiet_hours_subtext_disabled),
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_bell_sleep)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
);
syncCardQuietHoursItem.setChecked(app.appConfig.quietHoursStart > 0);
syncCardQuietHoursItem.setSubTextChecked(getSyncCardQuietHoursSubText());
syncCardQuietHoursItem.setOnClickAction(() -> {
new MaterialDialog.Builder(activity)
.title(R.string.settings_sync_quiet_hours_dialog_title)
.items(
getString(R.string.settings_sync_quiet_hours_set_beginning),
getString(R.string.settings_sync_quiet_hours_set_end)
)
.itemsCallback((dialog, itemView, position, text) -> {
if (position == 0) {
// set beginning
Time time = Time.fromMillis(Math.abs(app.appConfig.quietHoursStart));
TimePickerDialog.newInstance((v2, hourOfDay, minute, second) -> {
// if it's disabled, it'll be enabled automatically
app.appConfig.quietHoursStart = new Time(hourOfDay, minute, second).getInMillis();
app.saveConfig("quietHoursStart");
syncCardQuietHoursItem.setChecked(true);
syncCardQuietHoursItem.setSubTextChecked(getSyncCardQuietHoursSubText());
refreshMaterialAboutList();
}, time.hour, time.minute, 0, true).show(activity.getSupportFragmentManager(), "TimePickerDialog");
}
else {
// set end
Time time = Time.fromMillis(app.appConfig.quietHoursEnd);
TimePickerDialog.newInstance((v2, hourOfDay, minute, second) -> {
if (app.appConfig.quietHoursStart < 0) {
// if it's disabled, enable
app.appConfig.quietHoursStart *= -1;
app.saveConfig("quietHoursStart");
}
app.appConfig.quietHoursEnd = new Time(hourOfDay, minute, second).getInMillis();
app.saveConfig("quietHoursEnd");
syncCardQuietHoursItem.setChecked(true);
syncCardQuietHoursItem.setSubTextChecked(getSyncCardQuietHoursSubText());
refreshMaterialAboutList();
}, time.hour, time.minute, 0, true).show(activity.getSupportFragmentManager(), "TimePickerDialog");
}
})
.show();
});
syncCardQuietHoursItem.setOnChangeAction((isChecked, tag) -> {
if (isChecked && app.appConfig.quietHoursStart < 0) {
app.appConfig.quietHoursStart *= -1;
app.saveConfig("quietHoursStart");
}
else if (!isChecked && app.appConfig.quietHoursStart > 0) {
app.appConfig.quietHoursStart *= -1;
app.saveConfig("quietHoursStart");
}
else if (isChecked && app.appConfig.quietHoursStart == 0) {
app.appConfig.quietHoursStart = new Time(22, 30, 0).getInMillis();
app.appConfig.quietHoursEnd = new Time(5, 30, 0).getInMillis();
syncCardQuietHoursItem.setSubTextChecked(getSyncCardQuietHoursSubText());
refreshMaterialAboutList();
app.saveConfig("quietHoursStart", "quietHoursEnd");
}
return true;
});
items.add(syncCardQuietHoursItem);
items.add(
new MaterialAboutActionItem(
getString(R.string.settings_sync_web_push_text),
getString(R.string.settings_sync_web_push_subtext),
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_laptop)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
)
.setOnClickAction(() -> {
Intent i = new Intent(activity, WebPushConfigActivity.class);
startActivity(i);
})
);
items.add(getMoreItem(() -> addCardItems(CARD_SYNC, getSyncCard(true))));
}
else {
// TODO: 2019-04-27 add notification sound options: szkolny.eu, system default, custom
/*items.add(
new MaterialAboutActionItem(
"Dźwięk powiadomień",
"Szkolny.eu",
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_volume_high)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
)
.setOnClickAction(() -> {
})
);*/
items.add(
new MaterialAboutSwitchItem(
getString(R.string.settings_sync_updates_text),
null,
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_cellphone_arrow_down)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
)
.setChecked(app.appConfig.notifyAboutUpdates)
.setOnChangeAction((isChecked, tag) -> {
app.appConfig.notifyAboutUpdates = isChecked;
app.saveConfig("notifyAboutUpdates");
return true;
})
);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
items.add(
new MaterialAboutActionItem(
getString(R.string.settings_sync_notifications_settings_text),
getString(R.string.settings_sync_notifications_settings_subtext),
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_settings)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
)
.setOnClickAction(() -> {
String channel = Notifier.GROUP_KEY_NOTIFICATIONS;
Intent intent = new Intent();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
intent.addFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK);
if (channel != null) {
intent.setAction(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_CHANNEL_ID, channel);
} else {
intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
}
intent.putExtra(Settings.EXTRA_APP_PACKAGE, activity.getPackageName());
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (channel != null) {
intent.setAction(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_CHANNEL_ID, channel);
} else {
intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
}
intent.putExtra(Settings.EXTRA_APP_PACKAGE, activity.getPackageName());
} else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_APP_PACKAGE, activity.getPackageName());
} else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
intent.putExtra("app_package", activity.getPackageName());
intent.putExtra("app_uid", activity.getApplicationInfo().uid);
} else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + activity.getPackageName()));
}
activity.startActivity(intent);
})
);
}
}
return items;
}
/* _____ _ _
| __ \ (_) | |
| |__) |___ __ _ _ ___| |_ ___ _ __
| _ // _ \/ _` | / __| __/ _ \ '__|
| | \ \ __/ (_| | \__ \ || __/ |
|_| \_\___|\__, |_|___/\__\___|_|
__/ |
|__*/
private String getRegisterCardAverageModeSubText() {
switch (app.profile.getYearAverageMode()) {
default:
case YEAR_1_AVG_2_AVG:
return getString(R.string.settings_register_avg_mode_0_short);
case YEAR_1_SEM_2_AVG:
return getString(R.string.settings_register_avg_mode_1_short);
case YEAR_1_AVG_2_SEM:
return getString(R.string.settings_register_avg_mode_2_short);
case YEAR_1_SEM_2_SEM:
return getString(R.string.settings_register_avg_mode_3_short);
case YEAR_ALL_GRADES:
return getString(R.string.settings_register_avg_mode_4_short);
}
}
private String getRegisterCardBellSyncSubText() {
if (app.appConfig.bellSyncDiff == null)
return getString(R.string.settings_register_bell_sync_subtext_disabled);
return getString(
R.string.settings_register_bell_sync_subtext_format,
(app.appConfig.bellSyncMultiplier == -1 ? "-" : "+") + app.appConfig.bellSyncDiff.getStringHMS()
);
}
private MaterialAboutItem getRegisterCardSharedEventsItem() {
return new MaterialAboutSwitchItem(
getString(R.string.settings_register_shared_events_text),
getString(R.string.settings_register_shared_events_subtext),
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_share_variant)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
)
.setChecked(app.profile.getEnableSharedEvents())
.setOnChangeAction((isChecked, tag) -> {
app.profile.setEnableSharedEvents(isChecked);
app.profileSaveAsync();
if (isChecked) new MaterialDialog.Builder(activity)
.title(R.string.event_sharing)
.content(getString(R.string.settings_register_shared_events_dialog_enabled_text))
.positiveText(R.string.ok)
.show();
else new MaterialDialog.Builder(activity)
.title(R.string.event_sharing)
.content(getString(R.string.settings_register_shared_events_dialog_disabled_text))
.positiveText(R.string.ok)
.show();
return true;
});
}
private MaterialAboutActionItem registerCardAverageModeItem;
private MaterialAboutSwitchItem registerCardAllowRegistrationItem;
private MaterialAboutActionItem registerCardBellSyncItem;
private ArrayList<MaterialAboutItem> getRegisterCard(boolean expandedOnly) {
ArrayList<MaterialAboutItem> items = new ArrayList<>();
if (!expandedOnly) {
registerCardAverageModeItem = new MaterialAboutActionItem(
getString(R.string.settings_register_avg_mode_text),
getRegisterCardAverageModeSubText(),
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_scale_balance)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
);
registerCardAverageModeItem.setOnClickAction(() -> {
List<CharSequence> modeNames = new ArrayList<>();
modeNames.add(getString(R.string.settings_register_avg_mode_4));
modeNames.add(getString(R.string.settings_register_avg_mode_0));
modeNames.add(getString(R.string.settings_register_avg_mode_1));
modeNames.add(getString(R.string.settings_register_avg_mode_2));
modeNames.add(getString(R.string.settings_register_avg_mode_3));
List<Integer> modeIds = new ArrayList<>();
modeIds.add(YEAR_ALL_GRADES);
modeIds.add(YEAR_1_AVG_2_AVG);
modeIds.add(YEAR_1_SEM_2_AVG);
modeIds.add(YEAR_1_AVG_2_SEM);
modeIds.add(YEAR_1_SEM_2_SEM);
new MaterialDialog.Builder(activity)
.title(getString(R.string.settings_register_avg_mode_dialog_title))
.content(getString(R.string.settings_register_avg_mode_dialog_text))
.items(modeNames)
.itemsCallbackSingleChoice(modeIds.indexOf(app.profile.getYearAverageMode()), (dialog, itemView, which, text) -> {
app.profile.setYearAverageMode(modeIds.get(which));
app.profileSaveAsync();
registerCardAverageModeItem.setSubText(getRegisterCardAverageModeSubText());
refreshMaterialAboutList();
return true;
})
.show();
});
items.add(registerCardAverageModeItem);
registerCardAllowRegistrationItem = new MaterialAboutSwitchItem(
getString(R.string.settings_register_allow_registration_text),
getString(R.string.settings_register_allow_registration_subtext),
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_account_circle)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
);
registerCardAllowRegistrationItem.setChecked(app.profile.getRegistration() == REGISTRATION_ENABLED);
registerCardAllowRegistrationItem.setOnChangeAction((isChecked, tag) -> {
if (isChecked) new MaterialDialog.Builder(activity)
.title(getString(R.string.settings_register_allow_registration_dialog_enabled_title))
.content(getString(R.string.settings_register_allow_registration_dialog_enabled_text))
.positiveText(R.string.i_agree)
.negativeText(R.string.not_now)
.onPositive(((dialog, which) -> {
registerCardAllowRegistrationItem.setChecked(true);
app.profile.setRegistration(REGISTRATION_ENABLED);
app.profileSaveAsync();
addCardItem(CARD_REGISTER, 2, getRegisterCardSharedEventsItem());
refreshMaterialAboutList();
}))
.show();
else new MaterialDialog.Builder(activity)
.title(getString(R.string.settings_register_allow_registration_dialog_disabled_title))
.content(getString(R.string.settings_register_allow_registration_dialog_disabled_text))
.positiveText(R.string.ok)
.negativeText(R.string.cancel)
.onPositive(((dialog, which) -> {
registerCardAllowRegistrationItem.setChecked(false);
app.profile.setRegistration(REGISTRATION_DISABLED);
app.profileSaveAsync();
removeCardItem(CARD_REGISTER, 2);
refreshMaterialAboutList();
MaterialDialog progressDialog = new MaterialDialog.Builder(activity)
.title(getString(R.string.settings_register_allow_registration_dialog_disabling_title))
.content(getString(R.string.settings_register_allow_registration_dialog_disabling_text))
.positiveText(R.string.ok)
.negativeText(R.string.abort)
.show();
new ServerRequest(app, app.requestScheme + APP_URL + "main.php?unregister", "Edziennik/UREG", app.profile)
.withUsername(app.profile.getUsernameId())
.run((e, result) -> {
progressDialog.dismiss();
if (result == null || !result.get("success").getAsString().equals("true")) {
new MaterialDialog.Builder(activity)
.title(R.string.error)
.content(getString(R.string.settings_register_allow_registration_dialog_disabling_error_text))
.positiveText(R.string.ok)
.show();
}
else {
Toast.makeText(activity, getString(R.string.settings_register_allow_registration_dialog_disabling_finished), Toast.LENGTH_SHORT).show();
}
});
}))
.show();
return false;
});
items.add(registerCardAllowRegistrationItem);
if (app.profile.getRegistration() == REGISTRATION_ENABLED) {
items.add(getRegisterCardSharedEventsItem());
}
items.add(getMoreItem(() -> addCardItems(CARD_REGISTER, getRegisterCard(true))));
}
else {
registerCardBellSyncItem = new MaterialAboutActionItem(
getString(R.string.settings_register_bell_sync_text),
getRegisterCardBellSyncSubText(),
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_alarm_bell)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
);
registerCardBellSyncItem.setOnClickAction(() -> {
new MaterialDialog.Builder(activity)
.title(R.string.bell_sync_title)
.content(R.string.bell_sync_adjust_content)
.positiveText(R.string.ok)
.negativeText(R.string.cancel)
.neutralText(R.string.reset)
.inputRangeRes(8, 8, R.color.md_red_500)
.input("±H:MM:SS",
(app.appConfig.bellSyncDiff != null
? (app.appConfig.bellSyncMultiplier == -1 ? "-" : "+") + app.appConfig.bellSyncDiff.getStringHMS()
: ""), (dialog, input) -> {
if (input == null)
return;
if (input.length() < 8) {
Toast.makeText(activity, R.string.bell_sync_adjust_error, Toast.LENGTH_SHORT).show();
return;
}
if (input.charAt(2) != ':' || input.charAt(5) != ':') {
Toast.makeText(activity, R.string.bell_sync_adjust_error, Toast.LENGTH_SHORT).show();
return;
}
if (input.charAt(0) == '+') {
app.appConfig.bellSyncMultiplier = 1;
}
else if (input.charAt(0) == '-') {
app.appConfig.bellSyncMultiplier = -1;
}
else {
Toast.makeText(activity, R.string.bell_sync_adjust_error, Toast.LENGTH_SHORT).show();
return;
}
int hour;
int minute;
int second;
try {
hour = Integer.parseInt(input.charAt(1) + "");
minute = Integer.parseInt(input.charAt(3) + "" + input.charAt(4));
second = Integer.parseInt(input.charAt(6) + "" + input.charAt(7));
}
catch (Exception e) {
e.printStackTrace();
Toast.makeText(activity, R.string.bell_sync_adjust_error, Toast.LENGTH_SHORT).show();
return;
}
app.appConfig.bellSyncDiff = new Time(hour, minute, second);
app.saveConfig("bellSyncDiff", "bellSyncMultiplier");
registerCardBellSyncItem.setSubText(getRegisterCardBellSyncSubText());
refreshMaterialAboutList();
})
.onNeutral(((dialog, which) -> {
app.appConfig.bellSyncDiff = null;
app.appConfig.bellSyncMultiplier = 0;
app.saveConfig("bellSyncDiff", "bellSyncMultiplier");
registerCardBellSyncItem.setSubText(getRegisterCardBellSyncSubText());
refreshMaterialAboutList();
}))
.show();
});
items.add(registerCardBellSyncItem);
items.add(
new MaterialAboutSwitchItem(
getString(R.string.settings_register_dont_count_zero_text),
null,
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_numeric_0_box)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
)
.setChecked(app.appConfig.dontCountZeroToAverage)
.setOnChangeAction((isChecked, tag) -> {
app.appConfig.dontCountZeroToAverage = isChecked;
app.saveConfig("dontCountZeroToAverage");
return true;
})
);
items.add(
new MaterialAboutSwitchItem(
getString(R.string.settings_register_count_in_seconds_text),
getString(R.string.settings_register_count_in_seconds_subtext),
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_timer)
.size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor))
)
.setChecked(app.appConfig.countInSeconds)
.setOnChangeAction((isChecked, tag) -> {
app.appConfig.countInSeconds = isChecked;
app.saveConfig("countInSeconds");
return true;
})
);
}
return items;
}
/* _____ ______ _ _ _
/ ____| | ____| | | (_) | |
| (___ _ _ _ __ ___ | |__ _ __ __| |_ __ ___ _ _ __ | |_ ___
\___ \| | | | '_ \ / __| | __| | '_ \ / _` | '_ \ / _ \| | '_ \| __/ __|
____) | |_| | | | | (__ | |____| | | | (_| | |_) | (_) | | | | | |_\__ \
|_____/ \__, |_| |_|\___| |______|_| |_|\__,_| .__/ \___/|_|_| |_|\__|___/
__/ | | |
|___/ |*/
private String getEndpointTitle(String name) {
int stringRes = -1;
switch (name) {
case "Classrooms":
stringRes = R.string.settings_sync_customize_endpoint_classrooms;
break;
case "Timetables":
case "Timetable":
stringRes = R.string.settings_sync_customize_endpoint_timetable;
break;
case "Substitutions":
stringRes = R.string.settings_sync_customize_endpoint_substitutions;
break;
case "Grades":
stringRes = R.string.settings_sync_customize_endpoint_grades;
break;
case "PointGrades":
stringRes = R.string.settings_sync_customize_endpoint_point_grades;
break;
case "Events":
stringRes = R.string.settings_sync_customize_endpoint_events;
break;
case "Homeworks":
stringRes = R.string.settings_sync_customize_endpoint_homeworks;
break;
case "LuckyNumber":
case "LuckyNumbers":
stringRes = R.string.settings_sync_customize_endpoint_lucky_numbers;
break;
case "Notices":
stringRes = R.string.settings_sync_customize_endpoint_notices;
break;
case "Attendances":
stringRes = R.string.settings_sync_customize_endpoint_attendances;
break;
case "Announcements":
stringRes = R.string.settings_sync_customize_endpoint_announcements;
break;
case "PtMeetings":
stringRes = R.string.settings_sync_customize_endpoint_pt_meetings;
break;
case "TeacherFreeDays":
stringRes = R.string.settings_sync_customize_endpoint_teacher_free_days;
break;
case "SchoolFreeDays":
stringRes = R.string.settings_sync_customize_endpoint_school_free_days;
break;
case "ClassFreeDays":
stringRes = R.string.settings_sync_customize_endpoint_class_free_days;
break;
case "MessagesInbox":
stringRes = R.string.settings_sync_customize_endpoint_messages_inbox;
break;
case "MessagesOutbox":
stringRes = R.string.settings_sync_customize_endpoint_messages_outbox;
break;
}
if (stringRes == -1)
return name;
else
return getString(stringRes);
}
private MaterialAboutSwitchItem getEndpointSwitch(String name, Endpoint endpoint) {
return new MaterialAboutSwitchItem(
getEndpointTitle(name),
endpoint.onlyFullSync ? getString(R.string.settings_sync_customize_full_sync_only) : null,
null
)
.setChecked(endpoint.enabled)
.setOnChangeAction((isChecked, tag) -> {
endpoint.enabled = isChecked;
boolean changed = isChecked ^ endpoint.defaultActive;
if (!changed) {
if (app.profile.getChangedEndpoints() != null) {
app.profile.getChangedEndpoints().remove(name);
}
}
else {
if (app.profile.getChangedEndpoints() == null)
app.profile.setChangedEndpoints(new ArrayList<>());
app.profile.getChangedEndpoints().add(name);
}
app.profileSaveAsync();
return true;
});
}
private Map<String, Endpoint> configurableEndpoints = null;
private ArrayList<MaterialAboutItem> getSyncCustomizeCard(boolean expandedOnly) {
ArrayList<MaterialAboutItem> items = new ArrayList<>();
if (!expandedOnly) {
items.add(
new MaterialAboutActionItem(
null,
getString(R.string.settings_sync_customize_help_subtext),
null
)
);
if (app.profile.getChangedEndpoints() != null) {
for (String changedEndpoint : app.profile.getChangedEndpoints()) {
Endpoint endpoint = configurableEndpoints.get(changedEndpoint);
if (endpoint == null)
continue;
items.add(getEndpointSwitch(changedEndpoint, endpoint));
}
}
items.add(getMoreItem(() -> addCardItems(CARD_SYNC_CUSTOMIZE, getSyncCustomizeCard(true))));
}
else {
for (String endpointName: configurableEndpoints.keySet()) {
if (app.profile.getChangedEndpoints() != null && app.profile.getChangedEndpoints().contains(endpointName))
continue;
Endpoint endpoint = configurableEndpoints.get(endpointName);
if (endpoint == null)
continue;
items.add(getEndpointSwitch(endpointName, endpoint));
}
}
return items;
}
/* _ _
/\ | | | |
/ \ | |__ ___ _ _| |_
/ /\ \ | '_ \ / _ \| | | | __|
/ ____ \| |_) | (_) | |_| | |_
/_/ \_\_.__/ \___/ \__,_|\_*/
private MaterialAboutActionItem pref_about_version;
private ArrayList<MaterialAboutItem> getAboutCard(boolean expandedOnly) {
primaryTextOnPrimaryBg = 0xffffffff;//getColorFromAttr(activity, R.attr.colorOnPrimary);
secondaryTextOnPrimaryBg = 0xd0ffffff;//activity.getResources().getColor(R.color.secondaryTextLight);
ArrayList<MaterialAboutItem> items = new ArrayList<>();
items.add(new MaterialAboutTitleItem.Builder()
.text(R.string.app_name)
.desc(R.string.settings_about_title_subtext)
.textColor(primaryTextOnPrimaryBg)
.descColor(secondaryTextOnPrimaryBg)
.icon(R.mipmap.ic_splash)
.build());
pref_about_version = new MaterialAboutActionItem.Builder()
.text(R.string.settings_about_version_text)
.textColor(primaryTextOnPrimaryBg)
.subTextColor(secondaryTextOnPrimaryBg)
.subText(BuildConfig.VERSION_NAME+", "+BuildConfig.BUILD_TYPE)
.icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_information)
.color(IconicsColor.colorInt(primaryTextOnPrimaryBg))
.size(IconicsSize.dp(iconSizeDp)))
.build();
final int[] clickCounter = {0};
pref_about_version.setOnClickAction(() -> {
if (6 - clickCounter[0] != 0) {
Toast.makeText(activity, ("\ud83d\ude02"), Toast.LENGTH_SHORT).show();
}
refreshMaterialAboutList();
clickCounter[0] = clickCounter[0] + 1;
if (clickCounter[0] > 6)
{
final MediaPlayer mp = MediaPlayer.create(activity, R.raw.ogarnij_sie);
mp.start();
clickCounter[0] = 0;
}
});
items.add(pref_about_version);
items.add(new MaterialAboutActionItem.Builder()
.text(R.string.settings_about_privacy_policy_text)
.textColor(primaryTextOnPrimaryBg)
.subTextColor(secondaryTextOnPrimaryBg)
.icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_shield_half_full)
.color(IconicsColor.colorInt(primaryTextOnPrimaryBg))
.size(IconicsSize.dp(iconSizeDp)))
.setOnClickAction(ConvenienceBuilder.createWebsiteOnClickAction(activity, Uri.parse("https://szkolny.eu/privacy-policy")))
.build());
items.add(new MaterialAboutActionItem.Builder()
.text(R.string.settings_about_discord_text)
.textColor(primaryTextOnPrimaryBg)
.subTextColor(secondaryTextOnPrimaryBg)
.subText(R.string.settings_about_discord_subtext)
.icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_discord)
.color(IconicsColor.colorInt(primaryTextOnPrimaryBg))
.size(IconicsSize.dp(iconSizeDp)))
.setOnClickAction(ConvenienceBuilder.createWebsiteOnClickAction(activity, Uri.parse("https://discord.gg/n9e8pWr")))
.build());
items.add(new MaterialAboutActionItem.Builder()
.text(R.string.settings_about_update_text)
.subText(R.string.settings_about_update_subtext)
.textColor(primaryTextOnPrimaryBg)
.subTextColor(secondaryTextOnPrimaryBg)
.icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_update)
.color(IconicsColor.colorInt(primaryTextOnPrimaryBg))
.size(IconicsSize.dp(iconSizeDp)))
.setOnClickAction(() -> {
//open browser or intent here
NetworkUtils net = new NetworkUtils(app);
if (!net.isOnline())
{
new MaterialDialog.Builder(activity)
.title(R.string.you_are_offline_title)
.content(R.string.you_are_offline_text)
.positiveText(R.string.ok)
.show();
}
else
{
BootReceiver br = new BootReceiver();
Intent i = new Intent();
i.putExtra("UserChecked", true);
br.onReceive(getContext(), i);
}
})
.build());
items.add(new MaterialAboutActionItem.Builder()
.text(R.string.settings_about_changelog_text)
.textColor(primaryTextOnPrimaryBg)
.subTextColor(secondaryTextOnPrimaryBg)
.icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_radar)
.color(IconicsColor.colorInt(primaryTextOnPrimaryBg))
.size(IconicsSize.dp(iconSizeDp)))
.setOnClickAction(() -> new ChangelogDialog().show(getActivity().getSupportFragmentManager(), "whats_new"))
.build());
items.add(new MaterialAboutActionItem.Builder()
.text(R.string.settings_about_licenses_text)
.textColor(primaryTextOnPrimaryBg)
.subTextColor(secondaryTextOnPrimaryBg)
.icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_code_braces)
.color(IconicsColor.colorInt(primaryTextOnPrimaryBg))
.size(IconicsSize.dp(iconSizeDp)))
.setOnClickAction(() -> {
Intent intent = new Intent(activity, SettingsLicenseActivity.class);
startActivity(intent);
})
.build());
/*items.add(new MaterialAboutActionItem.Builder()
.text(R.string.settings_about_intro_text)
.icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_projector_screen)
.color(IconicsColor.colorInt(iconColor))
.size(IconicsSize.dp(iconSizeDp)))
.setOnClickAction(() -> {
if (tryingToDevMode[0]) {
if (getParentFragment() instanceof SettingsGeneralFragment) {
((SettingsGeneralFragment) getParentFragment()).showDevSettings();
}
tryingToDevMode[0] = false;
return;
}
IntroConnectionFragment.connectionOk = true;
IntroConnectionFragment.httpsOk = (app.requestScheme.equals("https"));
Intent intent = new Intent(activity, MainIntroActivity.class);
IntroSplashFragment.skipAnimation = false;
startActivity(intent);
})
.build());*/
if (App.devMode) {
items.add(new MaterialAboutActionItem.Builder()
.text(R.string.settings_about_crash_text)
.subText(R.string.settings_about_crash_subtext)
.textColor(primaryTextOnPrimaryBg)
.subTextColor(secondaryTextOnPrimaryBg)
.icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_bug)
.color(IconicsColor.colorInt(primaryTextOnPrimaryBg))
.size(IconicsSize.dp(iconSizeDp)))
.setOnClickAction(() -> {
throw new RuntimeException("MANUAL CRASH");
})
.build());
}
return items;
}
@Override
protected MaterialAboutList getMaterialAboutList(Context activityContext) {
if (getActivity() == null || getContext() == null || !isAdded())
return null;
this.activity = (MainActivity) activityContext;
this.app = (App) activity.getApplication();
iconColor = Themes.INSTANCE.getPrimaryTextColor(activityContext);
if (app.profile == null)
return new MaterialAboutList.Builder().build();
//configurableEndpoints = Edziennik.getApi(app, app.profile.loginStoreType).getConfigurableEndpoints(app.profile);
MaterialAboutList materialAboutList = new MaterialAboutList();
materialAboutList.addCard(getCardWithItems(null, getProfileCard(false)));
materialAboutList.addCard(getCardWithItems(getString(R.string.settings_theme_title_text), getThemeCard(false)));
materialAboutList.addCard(getCardWithItems(getString(R.string.settings_sync_title_text), getSyncCard(false)));
materialAboutList.addCard(getCardWithItems(getString(R.string.settings_about_register_title_text), getRegisterCard(false)));
//if (configurableEndpoints != null)
// materialAboutList.addCard(getCardWithItems(getString(R.string.settings_sync_customize_title_text), getSyncCustomizeCard(false)));
materialAboutList.addCard(getCardWithItems(null, getAboutCard(false), true));
return materialAboutList;
}
@Override
protected int getTheme() {
return Themes.INSTANCE.getAppTheme();
}
/* _____ _ ____ _ _
/ ____| | | | _ \ | | | |
| | _ _ ___| |_ ___ _ __ ___ | |_) | __ _ ___| | ____ _ _ __ ___ _ _ _ __ __| |___
| | | | | / __| __/ _ \| '_ ` _ \ | _ < / _` |/ __| |/ / _` | '__/ _ \| | | | '_ \ / _` / __|
| |___| |_| \__ \ || (_) | | | | | | | |_) | (_| | (__| < (_| | | | (_) | |_| | | | | (_| \__ \
\_____\__,_|___/\__\___/|_| |_| |_| |____/ \__,_|\___|_|\_\__, |_| \___/ \__,_|_| |_|\__,_|___/
__/ |
|__*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data == null) {
Toast.makeText(app, "Wystąpił błąd. Spróbuj ponownie", Toast.LENGTH_SHORT).show();
return;
}
if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) {
CropImage.ActivityResult result = CropImage.getActivityResult(data);
Uri uri = result.getUri();
File photoFile = new File(uri.getPath());
File destFile = new File(getContext().getFilesDir(),"profile"+ app.profile.getId() +".jpg");
if (destFile.exists()) {
destFile.delete();
destFile = new File(getContext().getFilesDir(),"profile"+ app.profile.getId() +".jpg");
}
d(TAG, "Source file: "+photoFile.getAbsolutePath());
d(TAG, "Dest file: "+destFile.getAbsolutePath());
if (result.getCropRect().width() > 512 || true) {
Bitmap bigImage = BitmapFactory.decodeFile(uri.getPath());
Bitmap smallImage = getResizedBitmap(bigImage, 512, 512);
try (FileOutputStream out = new FileOutputStream(destFile)) {
smallImage.compress(Bitmap.CompressFormat.JPEG, 80, out); // bmp is your Bitmap instance
// PNG is a lossless format, the compression factor (100) is ignored
app.profile.setImage(destFile.getAbsolutePath());
app.profileSaveAsync();
profileCardTitleItem.setIcon(getProfileDrawable());
refreshMaterialAboutList();
if (photoFile.exists()) {
photoFile.delete();
}
//((MainActivity)getActivity()).recreateWithTransition(); // TODO somehow update miniDrawer profile picture
} catch (IOException e) {
e.printStackTrace();
}
}
else {
if (photoFile.renameTo(destFile)) {
// success
app.profile.setImage(destFile.getAbsolutePath());
app.profileSaveAsync();
profileCardTitleItem.setIcon(getProfileDrawable());
refreshMaterialAboutList();
//((MainActivity)getActivity()).recreateWithTransition(); // TODO somehow update miniDrawer profile picture
}
else {
// not this time
Toast.makeText(app, R.string.error_occured, Toast.LENGTH_LONG).show();
}
}
}
else if (requestCode == 21 && resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();
if (uri != null) {
String path = getRealPathFromURI(activity, uri);
if (path.toLowerCase().endsWith(".gif")) {
app.profile.setImage(path);
app.profileSaveAsync();
profileCardTitleItem.setIcon(getProfileDrawable());
refreshMaterialAboutList();
}
else {
CropImage.activity(data.getData())
.setAspectRatio(1, 1)
//.setMaxCropResultSize(512, 512)
.setCropShape(CropImageView.CropShape.OVAL)
.setGuidelines(CropImageView.Guidelines.ON)
.start(activity, this);
}
}
}
else if (requestCode == 22 && resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();
if (uri != null) {
app.appConfig.headerBackground = getRealPathFromURI(getContext(), uri);
app.saveConfig("headerBackground");
if (activity != null) {
activity.getDrawer().setAccountHeaderBackground(app.appConfig.headerBackground);
activity.getDrawer().open();
}
}
}
else if (requestCode == 23 && resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();
if (uri != null) {
app.appConfig.appBackground = getRealPathFromURI(getContext(), uri);
app.saveConfig("appBackground");
if (activity != null) {
activity.recreate();
}
}
}
}
}