[Gradle] Extract material-about-library dependency.

This commit is contained in:
Kuba Szczodrzyński 2021-03-20 18:03:12 +01:00
parent 147f4c39e5
commit 50e7bf14d4
40 changed files with 108 additions and 5251 deletions

View File

@ -169,7 +169,7 @@ dependencies {
implementation project(":agendacalendarview") implementation project(":agendacalendarview")
implementation project(":cafebar") implementation project(":cafebar")
implementation project(":material-about-library") implementation "eu.szkolny:material-about-library:0534abf316"
implementation project(":mhttp") implementation project(":mhttp")
implementation project(":nachos") implementation project(":nachos")
//implementation project(":Navigation") //implementation project(":Navigation")

View File

@ -21,7 +21,6 @@ import com.danielstone.materialaboutlibrary.items.MaterialAboutActionItem;
import com.danielstone.materialaboutlibrary.items.MaterialAboutActionSwitchItem; import com.danielstone.materialaboutlibrary.items.MaterialAboutActionSwitchItem;
import com.danielstone.materialaboutlibrary.items.MaterialAboutItem; import com.danielstone.materialaboutlibrary.items.MaterialAboutItem;
import com.danielstone.materialaboutlibrary.items.MaterialAboutItemOnClickAction; import com.danielstone.materialaboutlibrary.items.MaterialAboutItemOnClickAction;
import com.danielstone.materialaboutlibrary.items.MaterialAboutProfileItem;
import com.danielstone.materialaboutlibrary.items.MaterialAboutSwitchItem; import com.danielstone.materialaboutlibrary.items.MaterialAboutSwitchItem;
import com.danielstone.materialaboutlibrary.items.MaterialAboutTitleItem; import com.danielstone.materialaboutlibrary.items.MaterialAboutTitleItem;
import com.danielstone.materialaboutlibrary.model.MaterialAboutCard; import com.danielstone.materialaboutlibrary.model.MaterialAboutCard;
@ -156,12 +155,12 @@ public class SettingsNewFragment extends MaterialAboutFragment {
roundDrawable.setCircular(true); roundDrawable.setCircular(true);
return roundDrawable;*/ return roundDrawable;*/
} }
private MaterialAboutProfileItem profileCardTitleItem; private MaterialAboutTitleItem profileCardTitleItem;
private ArrayList<MaterialAboutItem> getProfileCard(boolean expandedOnly) { private ArrayList<MaterialAboutItem> getProfileCard(boolean expandedOnly) {
ArrayList<MaterialAboutItem> items = new ArrayList<>(); ArrayList<MaterialAboutItem> items = new ArrayList<>();
if (!expandedOnly) { if (!expandedOnly) {
profileCardTitleItem = new MaterialAboutProfileItem( profileCardTitleItem = new MaterialAboutTitleItem(
app.getProfile().getName(), app.getProfile().getName(),
app.getProfile().getSubname(), app.getProfile().getSubname(),
getProfileDrawable() getProfileDrawable()
@ -267,20 +266,20 @@ public class SettingsNewFragment extends MaterialAboutFragment {
else { else {
items.add( items.add(
new MaterialAboutSwitchItem( new MaterialAboutSwitchItem.Builder()
getString(R.string.settings_profile_sync_text), .text(R.string.settings_profile_sync_text)
getString(R.string.settings_profile_sync_subtext), .subText(R.string.settings_profile_sync_subtext)
new IconicsDrawable(activity) .icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_account_convert) .icon(CommunityMaterial.Icon.cmd_account_convert)
.size(IconicsSize.dp(iconSizeDp)) .size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor)) .color(IconicsColor.colorInt(iconColor)))
)
.setChecked(app.getProfile().getSyncEnabled()) .setChecked(app.getProfile().getSyncEnabled())
.setOnChangeAction(((isChecked, tag) -> { .setOnCheckedChanged(((item, isChecked) -> {
app.getProfile().setSyncEnabled(isChecked); app.getProfile().setSyncEnabled(isChecked);
app.profileSave(); app.profileSave();
return true; return true;
})) }))
.build()
); );
} }
@ -300,20 +299,20 @@ public class SettingsNewFragment extends MaterialAboutFragment {
Date today = Date.getToday(); Date today = Date.getToday();
if (today.month == 12 || today.month == 1) { if (today.month == 12 || today.month == 1) {
items.add( items.add(
new MaterialAboutSwitchItem( new MaterialAboutSwitchItem.Builder()
getString(R.string.settings_theme_snowfall_text), .text(R.string.settings_theme_snowfall_text)
getString(R.string.settings_theme_snowfall_subtext), .subText(R.string.settings_theme_snowfall_subtext)
new IconicsDrawable(activity) .icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_snowflake) .icon(CommunityMaterial.Icon2.cmd_snowflake)
.size(IconicsSize.dp(iconSizeDp)) .size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor)) .color(IconicsColor.colorInt(iconColor)))
)
.setChecked(app.getConfig().getUi().getSnowfall()) .setChecked(app.getConfig().getUi().getSnowfall())
.setOnChangeAction((isChecked, tag) -> { .setOnCheckedChanged((item, isChecked) -> {
app.getConfig().getUi().setSnowfall(isChecked); app.getConfig().getUi().setSnowfall(isChecked);
activity.recreate(); activity.recreate();
return true; return true;
}) })
.build()
); );
} }
@ -343,24 +342,24 @@ public class SettingsNewFragment extends MaterialAboutFragment {
); );
items.add( items.add(
new MaterialAboutSwitchItem( new MaterialAboutSwitchItem.Builder()
getString(R.string.settings_theme_mini_drawer_text), .text(R.string.settings_theme_mini_drawer_text)
getString(R.string.settings_theme_mini_drawer_subtext), .subText(R.string.settings_theme_mini_drawer_subtext)
new IconicsDrawable(activity) .icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_dots_vertical) .icon(CommunityMaterial.Icon.cmd_dots_vertical)
.size(IconicsSize.dp(iconSizeDp)) .size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor)) .color(IconicsColor.colorInt(iconColor)))
) .setChecked(app.getConfig().getUi().getMiniMenuVisible())
.setChecked(app.getConfig().getUi().getMiniMenuVisible()) .setOnCheckedChanged((item, isChecked) -> {
.setOnChangeAction((isChecked, tag) -> { // 0,1 1
// 0,1 1 // 0,0 0
// 0,0 0 // 1,1 0
// 1,1 0 // 1,0 1
// 1,0 1 app.getConfig().getUi().setMiniMenuVisible(isChecked);
app.getConfig().getUi().setMiniMenuVisible(isChecked); activity.getNavView().drawer.setMiniDrawerVisiblePortrait(isChecked);
activity.getNavView().drawer.setMiniDrawerVisiblePortrait(isChecked); return true;
return true; })
}) .build()
); );
items.add(getMoreItem(() -> addCardItems(CARD_THEME, getThemeCard(true)))); items.add(getMoreItem(() -> addCardItems(CARD_THEME, getThemeCard(true))));
@ -496,19 +495,18 @@ public class SettingsNewFragment extends MaterialAboutFragment {
); );
items.add( items.add(
new MaterialAboutSwitchItem( new MaterialAboutSwitchItem.Builder( )
getString(R.string.settings_theme_open_drawer_on_back_pressed_text), .text(R.string.settings_theme_open_drawer_on_back_pressed_text)
null, .icon(new IconicsDrawable(activity)
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_menu_open) .icon(CommunityMaterial.Icon2.cmd_menu_open)
.size(IconicsSize.dp(iconSizeDp)) .size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor)) .color(IconicsColor.colorInt(iconColor)))
)
.setChecked(app.getConfig().getUi().getOpenDrawerOnBackPressed()) .setChecked(app.getConfig().getUi().getOpenDrawerOnBackPressed())
.setOnChangeAction((isChecked, tag) -> { .setOnCheckedChanged((item, isChecked) -> {
app.getConfig().getUi().setOpenDrawerOnBackPressed(isChecked); app.getConfig().getUi().setOpenDrawerOnBackPressed(isChecked);
return true; return true;
}) })
.build()
); );
} }
return items; return items;
@ -548,20 +546,20 @@ public class SettingsNewFragment extends MaterialAboutFragment {
); );
} }
private MaterialAboutItem getSyncCardWifiItem() { private MaterialAboutItem getSyncCardWifiItem() {
return new MaterialAboutSwitchItem( return new MaterialAboutSwitchItem.Builder()
getString(R.string.settings_sync_wifi_text), .text(R.string.settings_sync_wifi_text)
getString(R.string.settings_sync_wifi_subtext), .subText(R.string.settings_sync_wifi_subtext)
new IconicsDrawable(activity) .icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_wifi_strength_2) .icon(CommunityMaterial.Icon2.cmd_wifi_strength_2)
.size(IconicsSize.dp(iconSizeDp)) .size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor)) .color(IconicsColor.colorInt(iconColor)))
)
.setChecked(app.getConfig().getSync().getOnlyWifi()) .setChecked(app.getConfig().getSync().getOnlyWifi())
.setOnChangeAction((isChecked, tag) -> { .setOnCheckedChanged((item, isChecked) -> {
app.getConfig().getSync().setOnlyWifi(isChecked); app.getConfig().getSync().setOnlyWifi(isChecked);
SyncWorker.Companion.rescheduleNext(app); SyncWorker.Companion.rescheduleNext(app);
return true; return true;
}); })
.build();
} }
private MaterialAboutActionSwitchItem syncCardIntervalItem; private MaterialAboutActionSwitchItem syncCardIntervalItem;
private MaterialAboutActionSwitchItem syncCardQuietHoursItem; private MaterialAboutActionSwitchItem syncCardQuietHoursItem;
@ -569,14 +567,14 @@ public class SettingsNewFragment extends MaterialAboutFragment {
ArrayList<MaterialAboutItem> items = new ArrayList<>(); ArrayList<MaterialAboutItem> items = new ArrayList<>();
if (!expandedOnly) { if (!expandedOnly) {
syncCardIntervalItem = new MaterialAboutActionSwitchItem( syncCardIntervalItem = new MaterialAboutActionSwitchItem.Builder()
getString(R.string.settings_sync_sync_interval_text), .text(R.string.settings_sync_sync_interval_text)
getString(R.string.settings_sync_sync_interval_subtext_disabled), .subText(R.string.settings_sync_sync_interval_subtext_disabled)
new IconicsDrawable(activity) .icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_download_outline) .icon(CommunityMaterial.Icon.cmd_download_outline)
.size(IconicsSize.dp(iconSizeDp)) .size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor)) .color(IconicsColor.colorInt(iconColor)))
); .build();
syncCardIntervalItem.setSubTextChecked(getSyncCardIntervalSubText()); syncCardIntervalItem.setSubTextChecked(getSyncCardIntervalSubText());
syncCardIntervalItem.setChecked(app.getConfig().getSync().getEnabled()); syncCardIntervalItem.setChecked(app.getConfig().getSync().getEnabled());
syncCardIntervalItem.setOnClickAction(() -> { syncCardIntervalItem.setOnClickAction(() -> {
@ -625,7 +623,7 @@ public class SettingsNewFragment extends MaterialAboutFragment {
}) })
.show(); .show();
}); });
syncCardIntervalItem.setOnChangeAction((isChecked, tag) -> { syncCardIntervalItem.setOnCheckedChangedAction((item, isChecked) -> {
if (isChecked && !app.getConfig().getSync().getEnabled()) { if (isChecked && !app.getConfig().getSync().getEnabled()) {
addCardItem(CARD_SYNC, 1, getSyncCardWifiItem()); addCardItem(CARD_SYNC, 1, getSyncCardWifiItem());
} }
@ -660,14 +658,14 @@ public class SettingsNewFragment extends MaterialAboutFragment {
);*/ );*/
syncCardQuietHoursItem = new MaterialAboutActionSwitchItem( syncCardQuietHoursItem = new MaterialAboutActionSwitchItem.Builder()
getString(R.string.settings_sync_quiet_hours_text), .text(R.string.settings_sync_quiet_hours_text)
getString(R.string.settings_sync_quiet_hours_subtext_disabled), .subText(R.string.settings_sync_quiet_hours_subtext_disabled)
new IconicsDrawable(activity) .icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_bell_sleep_outline) .icon(CommunityMaterial.Icon.cmd_bell_sleep_outline)
.size(IconicsSize.dp(iconSizeDp)) .size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor)) .color(IconicsColor.colorInt(iconColor)))
); .build();
syncCardQuietHoursItem.setChecked(app.getConfig().getSync().getQuietHoursEnabled()); syncCardQuietHoursItem.setChecked(app.getConfig().getSync().getQuietHoursEnabled());
syncCardQuietHoursItem.setSubTextChecked(getSyncCardQuietHoursSubText()); syncCardQuietHoursItem.setSubTextChecked(getSyncCardQuietHoursSubText());
syncCardQuietHoursItem.setOnClickAction(() -> { syncCardQuietHoursItem.setOnClickAction(() -> {
@ -707,7 +705,7 @@ public class SettingsNewFragment extends MaterialAboutFragment {
}) })
.show(); .show();
}); });
syncCardQuietHoursItem.setOnChangeAction((isChecked, tag) -> { syncCardQuietHoursItem.setOnCheckedChangedAction((item, isChecked) -> {
app.getConfig().getSync().setQuietHoursEnabled(isChecked); app.getConfig().getSync().setQuietHoursEnabled(isChecked);
if (isChecked && app.getConfig().getSync().getQuietHoursStart() == null) { if (isChecked && app.getConfig().getSync().getQuietHoursStart() == null) {
app.getConfig().getSync().setQuietHoursStart(new Time(22, 30, 0)); app.getConfig().getSync().setQuietHoursStart(new Time(22, 30, 0));
@ -752,20 +750,19 @@ public class SettingsNewFragment extends MaterialAboutFragment {
);*/ );*/
items.add( items.add(
new MaterialAboutSwitchItem( new MaterialAboutSwitchItem.Builder()
getString(R.string.settings_sync_updates_text), .text(R.string.settings_sync_updates_text)
null, .icon(new IconicsDrawable(activity)
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_cellphone_arrow_down) .icon(CommunityMaterial.Icon.cmd_cellphone_arrow_down)
.size(IconicsSize.dp(iconSizeDp)) .size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor)) .color(IconicsColor.colorInt(iconColor)))
)
.setChecked(app.getConfig().getSync().getNotifyAboutUpdates()) .setChecked(app.getConfig().getSync().getNotifyAboutUpdates())
.setOnChangeAction((isChecked, tag) -> { .setOnCheckedChanged((item, isChecked) -> {
app.getConfig().getSync().setNotifyAboutUpdates(isChecked); app.getConfig().getSync().setNotifyAboutUpdates(isChecked);
UpdateWorker.Companion.rescheduleNext(app); UpdateWorker.Companion.rescheduleNext(app);
return true; return true;
}) })
.build()
); );
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
@ -846,16 +843,15 @@ public class SettingsNewFragment extends MaterialAboutFragment {
); );
} }
private MaterialAboutItem getRegisterCardSharedEventsItem() { private MaterialAboutItem getRegisterCardSharedEventsItem() {
return new MaterialAboutSwitchItem( return new MaterialAboutSwitchItem.Builder()
getString(R.string.settings_register_shared_events_text), .text(R.string.settings_register_shared_events_text)
getString(R.string.settings_register_shared_events_subtext), .subText(R.string.settings_register_shared_events_subtext)
new IconicsDrawable(activity) .icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_share_outline) .icon(CommunityMaterial.Icon2.cmd_share_outline)
.size(IconicsSize.dp(iconSizeDp)) .size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor)) .color(IconicsColor.colorInt(iconColor)))
)
.setChecked(app.getProfile().getEnableSharedEvents()) .setChecked(app.getProfile().getEnableSharedEvents())
.setOnChangeAction((isChecked, tag) -> { .setOnCheckedChanged((item, isChecked) -> {
app.getProfile().setEnableSharedEvents(isChecked); app.getProfile().setEnableSharedEvents(isChecked);
app.profileSave(); app.profileSave();
if (isChecked) new MaterialDialog.Builder(activity) if (isChecked) new MaterialDialog.Builder(activity)
@ -869,7 +865,8 @@ public class SettingsNewFragment extends MaterialAboutFragment {
.positiveText(R.string.ok) .positiveText(R.string.ok)
.show(); .show();
return true; return true;
}); })
.build();
} }
private MaterialAboutSwitchItem registerCardAllowRegistrationItem; private MaterialAboutSwitchItem registerCardAllowRegistrationItem;
@ -895,16 +892,16 @@ public class SettingsNewFragment extends MaterialAboutFragment {
.color(IconicsColor.colorInt(iconColor)) .color(IconicsColor.colorInt(iconColor))
).setOnClickAction(() -> new AttendanceConfigDialog(activity, false, null, null))); ).setOnClickAction(() -> new AttendanceConfigDialog(activity, false, null, null)));
registerCardAllowRegistrationItem = new MaterialAboutSwitchItem( registerCardAllowRegistrationItem = new MaterialAboutSwitchItem.Builder()
getString(R.string.settings_register_allow_registration_text), .text(R.string.settings_register_allow_registration_text)
getString(R.string.settings_register_allow_registration_subtext), .subText(R.string.settings_register_allow_registration_subtext)
new IconicsDrawable(activity) .icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_account_circle_outline) .icon(CommunityMaterial.Icon.cmd_account_circle_outline)
.size(IconicsSize.dp(iconSizeDp)) .size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor)) .color(IconicsColor.colorInt(iconColor)))
); .build();
registerCardAllowRegistrationItem.setChecked(app.getProfile().getRegistration() == REGISTRATION_ENABLED); registerCardAllowRegistrationItem.setChecked(app.getProfile().getRegistration() == REGISTRATION_ENABLED);
registerCardAllowRegistrationItem.setOnChangeAction((isChecked, tag) -> { registerCardAllowRegistrationItem.setOnCheckedChangedAction((item, isChecked) -> {
if (isChecked) new MaterialDialog.Builder(activity) if (isChecked) new MaterialDialog.Builder(activity)
.title(getString(R.string.settings_register_allow_registration_dialog_enabled_title)) .title(getString(R.string.settings_register_allow_registration_dialog_enabled_title))
.content(getString(R.string.settings_register_allow_registration_dialog_enabled_text)) .content(getString(R.string.settings_register_allow_registration_dialog_enabled_text))
@ -1025,55 +1022,53 @@ public class SettingsNewFragment extends MaterialAboutFragment {
items.add(registerCardBellSyncItem); items.add(registerCardBellSyncItem);
items.add( items.add(
new MaterialAboutSwitchItem( new MaterialAboutSwitchItem.Builder()
getString(R.string.settings_register_count_in_seconds_text), .text(R.string.settings_register_count_in_seconds_text)
getString(R.string.settings_register_count_in_seconds_subtext), .subText(R.string.settings_register_count_in_seconds_subtext)
new IconicsDrawable(activity) .icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_timer) .icon(CommunityMaterial.Icon2.cmd_timer)
.size(IconicsSize.dp(iconSizeDp)) .size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor)) .color(IconicsColor.colorInt(iconColor)))
)
.setChecked(app.getConfig().getTimetable().getCountInSeconds()) .setChecked(app.getConfig().getTimetable().getCountInSeconds())
.setOnChangeAction((isChecked, tag) -> { .setOnCheckedChanged((item, isChecked) -> {
app.getConfig().getTimetable().setCountInSeconds(isChecked); app.getConfig().getTimetable().setCountInSeconds(isChecked);
return true; return true;
}) })
.build()
); );
if (app.getProfile().getLoginStoreType() == LoginStore.LOGIN_TYPE_LIBRUS) { if (app.getProfile().getLoginStoreType() == LoginStore.LOGIN_TYPE_LIBRUS) {
items.add( items.add(
new MaterialAboutSwitchItem( new MaterialAboutSwitchItem.Builder()
getString(R.string.settings_register_show_teacher_absences_text), .text(R.string.settings_register_show_teacher_absences_text)
null, .icon(new IconicsDrawable(activity)
new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_account_arrow_right_outline) .icon(CommunityMaterial.Icon.cmd_account_arrow_right_outline)
.size(IconicsSize.dp(iconSizeDp)) .size(IconicsSize.dp(iconSizeDp))
.color(IconicsColor.colorInt(iconColor)) .color(IconicsColor.colorInt(iconColor)))
)
.setChecked(app.getProfile().getStudentData("showTeacherAbsences", true)) .setChecked(app.getProfile().getStudentData("showTeacherAbsences", true))
.setOnChangeAction((isChecked, tag) -> { .setOnCheckedChanged((item, isChecked) -> {
app.getProfile().putStudentData("showTeacherAbsences", isChecked); app.getProfile().putStudentData("showTeacherAbsences", isChecked);
app.profileSave(); app.profileSave();
return true; return true;
}) })
.build()
); );
} }
if (App.Companion.getDevMode()) { if (App.Companion.getDevMode()) {
items.add( items.add(
new MaterialAboutSwitchItem( new MaterialAboutSwitchItem.Builder()
getString(R.string.settings_register_hide_sticks_from_old), .text(R.string.settings_register_hide_sticks_from_old)
null, .icon(new IconicsDrawable(activity)
new IconicsDrawable(activity) .icon(CommunityMaterial.Icon2.cmd_numeric_1_box_outline)
.icon(CommunityMaterial.Icon2.cmd_numeric_1_box_outline) .size(IconicsSize.dp(iconSizeDp))
.size(IconicsSize.dp(iconSizeDp)) .color(IconicsColor.colorInt(iconColor)))
.color(IconicsColor.colorInt(iconColor))
)
.setChecked(app.getConfig().forProfile().getGrades().getHideSticksFromOld()) .setChecked(app.getConfig().forProfile().getGrades().getHideSticksFromOld())
.setOnChangeAction((isChecked, tag) -> { .setOnCheckedChanged((item, isChecked) -> {
app.getConfig().forProfile().getGrades().setHideSticksFromOld(isChecked); app.getConfig().forProfile().getGrades().setHideSticksFromOld(isChecked);
return true; return true;
}) })
.build()
); );
} }
@ -1097,15 +1092,11 @@ public class SettingsNewFragment extends MaterialAboutFragment {
items.add(new MaterialAboutTitleItem.Builder() items.add(new MaterialAboutTitleItem.Builder()
.text(R.string.app_name) .text(R.string.app_name)
.desc(R.string.settings_about_title_subtext) .desc(R.string.settings_about_title_subtext)
.textColor(primaryTextOnPrimaryBg)
.descColor(secondaryTextOnPrimaryBg)
.icon(R.mipmap.ic_splash) .icon(R.mipmap.ic_splash)
.build()); .build());
pref_about_version = new MaterialAboutActionItem.Builder() pref_about_version = new MaterialAboutActionItem.Builder()
.text(R.string.settings_about_version_text) .text(R.string.settings_about_version_text)
.textColor(primaryTextOnPrimaryBg)
.subTextColor(secondaryTextOnPrimaryBg)
.subText(BuildConfig.VERSION_NAME + ", " + BuildConfig.BUILD_TYPE) .subText(BuildConfig.VERSION_NAME + ", " + BuildConfig.BUILD_TYPE)
.icon(new IconicsDrawable(activity) .icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_information_outline) .icon(CommunityMaterial.Icon2.cmd_information_outline)
@ -1129,8 +1120,6 @@ public class SettingsNewFragment extends MaterialAboutFragment {
items.add(new MaterialAboutActionItem.Builder() items.add(new MaterialAboutActionItem.Builder()
.text(R.string.settings_about_privacy_policy_text) .text(R.string.settings_about_privacy_policy_text)
.textColor(primaryTextOnPrimaryBg)
.subTextColor(secondaryTextOnPrimaryBg)
.icon(new IconicsDrawable(activity) .icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_shield_outline) .icon(CommunityMaterial.Icon2.cmd_shield_outline)
.color(IconicsColor.colorInt(primaryTextOnPrimaryBg)) .color(IconicsColor.colorInt(primaryTextOnPrimaryBg))
@ -1140,8 +1129,6 @@ public class SettingsNewFragment extends MaterialAboutFragment {
items.add(new MaterialAboutActionItem.Builder() items.add(new MaterialAboutActionItem.Builder()
.text(R.string.settings_about_discord_text) .text(R.string.settings_about_discord_text)
.textColor(primaryTextOnPrimaryBg)
.subTextColor(secondaryTextOnPrimaryBg)
.subText(R.string.settings_about_discord_subtext) .subText(R.string.settings_about_discord_subtext)
.icon(new IconicsDrawable(activity) .icon(new IconicsDrawable(activity)
.icon(SzkolnyFont.Icon.szf_discord_outline) .icon(SzkolnyFont.Icon.szf_discord_outline)
@ -1152,8 +1139,6 @@ public class SettingsNewFragment extends MaterialAboutFragment {
items.add(new MaterialAboutActionItem.Builder() items.add(new MaterialAboutActionItem.Builder()
.text(R.string.settings_about_language_text) .text(R.string.settings_about_language_text)
.textColor(primaryTextOnPrimaryBg)
.subTextColor(secondaryTextOnPrimaryBg)
.subText(R.string.settings_about_language_subtext) .subText(R.string.settings_about_language_subtext)
.icon(new IconicsDrawable(activity) .icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_translate) .icon(CommunityMaterial.Icon2.cmd_translate)
@ -1193,8 +1178,6 @@ public class SettingsNewFragment extends MaterialAboutFragment {
items.add(new MaterialAboutActionItem.Builder() items.add(new MaterialAboutActionItem.Builder()
.text(R.string.settings_about_update_text) .text(R.string.settings_about_update_text)
.subText(R.string.settings_about_update_subtext) .subText(R.string.settings_about_update_subtext)
.textColor(primaryTextOnPrimaryBg)
.subTextColor(secondaryTextOnPrimaryBg)
.icon(new IconicsDrawable(activity) .icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_update) .icon(CommunityMaterial.Icon2.cmd_update)
.color(IconicsColor.colorInt(primaryTextOnPrimaryBg)) .color(IconicsColor.colorInt(primaryTextOnPrimaryBg))
@ -1218,8 +1201,6 @@ public class SettingsNewFragment extends MaterialAboutFragment {
items.add(new MaterialAboutActionItem.Builder() items.add(new MaterialAboutActionItem.Builder()
.text(R.string.settings_about_changelog_text) .text(R.string.settings_about_changelog_text)
.textColor(primaryTextOnPrimaryBg)
.subTextColor(secondaryTextOnPrimaryBg)
.icon(new IconicsDrawable(activity) .icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon2.cmd_radar) .icon(CommunityMaterial.Icon2.cmd_radar)
.color(IconicsColor.colorInt(primaryTextOnPrimaryBg)) .color(IconicsColor.colorInt(primaryTextOnPrimaryBg))
@ -1229,8 +1210,6 @@ public class SettingsNewFragment extends MaterialAboutFragment {
items.add(new MaterialAboutActionItem.Builder() items.add(new MaterialAboutActionItem.Builder()
.text(R.string.settings_about_licenses_text) .text(R.string.settings_about_licenses_text)
.textColor(primaryTextOnPrimaryBg)
.subTextColor(secondaryTextOnPrimaryBg)
.icon(new IconicsDrawable(activity) .icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_code_braces) .icon(CommunityMaterial.Icon.cmd_code_braces)
.color(IconicsColor.colorInt(primaryTextOnPrimaryBg)) .color(IconicsColor.colorInt(primaryTextOnPrimaryBg))
@ -1267,8 +1246,6 @@ public class SettingsNewFragment extends MaterialAboutFragment {
items.add(new MaterialAboutActionItem.Builder() items.add(new MaterialAboutActionItem.Builder()
.text(R.string.settings_about_crash_text) .text(R.string.settings_about_crash_text)
.subText(R.string.settings_about_crash_subtext) .subText(R.string.settings_about_crash_subtext)
.textColor(primaryTextOnPrimaryBg)
.subTextColor(secondaryTextOnPrimaryBg)
.icon(new IconicsDrawable(activity) .icon(new IconicsDrawable(activity)
.icon(CommunityMaterial.Icon.cmd_bug_outline) .icon(CommunityMaterial.Icon.cmd_bug_outline)
.color(IconicsColor.colorInt(primaryTextOnPrimaryBg)) .color(IconicsColor.colorInt(primaryTextOnPrimaryBg))
@ -1304,11 +1281,6 @@ public class SettingsNewFragment extends MaterialAboutFragment {
return materialAboutList; return materialAboutList;
} }
@Override
protected int getTheme() {
return Themes.INSTANCE.getAppTheme();
}
/* _____ _ ____ _ _ /* _____ _ ____ _ _
/ ____| | | | _ \ | | | | / ____| | | | _ \ | | | |
| | _ _ ___| |_ ___ _ __ ___ | |_) | __ _ ___| | ____ _ _ __ ___ _ _ _ __ __| |___ | | _ _ ___| |_ ___ _ __ ___ | |_) | __ _ ___| | ____ _ _ __ ___ _ _ _ __ __| |___

View File

@ -111,12 +111,9 @@
<item name="md_link_color">?colorAccent</item> <item name="md_link_color">?colorAccent</item>
<item name="md_item_color">?android:textColorPrimary</item> <item name="md_item_color">?android:textColorPrimary</item>
<item name="mal_toolbarTheme">@style/Theme.Mal.Toolbar.Dark</item>
<item name="mal_toolbarPopupTheme">@style/Theme.Mal.Toolbar.Light</item>
<item name="mal_color_primary">?android:textColorPrimary</item> <item name="mal_color_primary">?android:textColorPrimary</item>
<item name="mal_color_secondary">?android:textColorSecondary</item> <item name="mal_color_secondary">?android:textColorSecondary</item>
<item name="mal_card_background">?colorSurface</item> <item name="mal_card_background">?colorSurface</item>
<item name="mal_divider_color">@color/dividerColor</item>
<item name="timetable_lesson_bg">@drawable/timetable_lesson_bg_light</item> <item name="timetable_lesson_bg">@drawable/timetable_lesson_bg_light</item>
<item name="timetable_lesson_cancelled_color">#9f9f9f</item> <item name="timetable_lesson_cancelled_color">#9f9f9f</item>
@ -147,12 +144,9 @@
<item name="md_link_color">?colorAccent</item> <item name="md_link_color">?colorAccent</item>
<item name="md_item_color">?android:textColorPrimary</item> <item name="md_item_color">?android:textColorPrimary</item>
<item name="mal_toolbarTheme">@style/Theme.Mal.Toolbar.Dark</item>
<item name="mal_toolbarPopupTheme">@style/Theme.Mal.Toolbar.Dark</item>
<item name="mal_color_primary">@color/primaryTextDark</item> <item name="mal_color_primary">@color/primaryTextDark</item>
<item name="mal_color_secondary">@color/secondaryTextDark</item> <item name="mal_color_secondary">@color/secondaryTextDark</item>
<item name="mal_card_background">?colorSurface</item> <item name="mal_card_background">?colorSurface</item>
<item name="mal_divider_color">@color/dividerColor</item>
<item name="timetable_lesson_bg">@drawable/timetable_lesson_bg_dark</item> <item name="timetable_lesson_bg">@drawable/timetable_lesson_bg_dark</item>
<item name="timetable_lesson_cancelled_color">#838383</item> <item name="timetable_lesson_cancelled_color">#838383</item>

View File

@ -1,38 +0,0 @@
apply plugin: 'com.android.library'
group = 'com.github.daniel-stoneuk'
def versionMajor = 2
def versionMinor = 3
def versionPatch = 0
def versionBuild = 0 // bump for dogfood builds, public betas, etc.
android {
compileSdkVersion setup.compileSdk
defaultConfig {
minSdkVersion 14
targetSdkVersion setup.targetSdk
versionCode versionMajor * 10000 + versionMinor * 1000 + versionPatch * 100 + versionBuild
versionName "${versionMajor}.${versionMinor}" + (versionPatch == 0 ? "" : ".${versionPatch}")
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debugMinify {
debuggable = true
minifyEnabled = true
proguardFiles 'proguard-android.txt'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "androidx.appcompat:appcompat:${versions.appcompat}"
implementation "androidx.cardview:cardview:${versions.cardview}"
implementation "com.google.android.material:material:${versions.material}"
}

View File

@ -1,4 +0,0 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.danielstone.materialaboutlibrary">
</manifest>

View File

@ -1,357 +0,0 @@
package com.danielstone.materialaboutlibrary;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import android.webkit.WebView;
import android.widget.Toast;
import com.danielstone.materialaboutlibrary.items.MaterialAboutActionItem;
import com.danielstone.materialaboutlibrary.items.MaterialAboutItemOnClickAction;
import com.danielstone.materialaboutlibrary.items.MaterialAboutTitleItem;
import com.danielstone.materialaboutlibrary.model.MaterialAboutCard;
import com.danielstone.materialaboutlibrary.util.OpenSourceLicense;
@SuppressWarnings("JavaDoc")
public class ConvenienceBuilder {
public static MaterialAboutTitleItem createAppTitleItem(String appName, Drawable applicationIcon) {
return new MaterialAboutTitleItem(appName, null, applicationIcon);
}
public static MaterialAboutTitleItem createAppTitleItem(Context c) {
Context applicationContext = c.getApplicationContext();
PackageManager packageManager = applicationContext.getPackageManager();
ApplicationInfo applicationInfo = applicationContext.getApplicationInfo();
CharSequence appName = packageManager.getApplicationLabel(applicationInfo);
Drawable applicationIcon = packageManager.getApplicationIcon(applicationInfo);
return createAppTitleItem(appName == null ? "" : appName.toString(), applicationIcon);
}
/**
* Creates an item with version info read from the PackageManager for current application.
*
* @param c context
* @param icon
* @param text
* @param includeVersionCode
* @return Item to add to card.
*/
public static MaterialAboutActionItem createVersionActionItem(Context c, Drawable icon, CharSequence text, boolean includeVersionCode) {
String versionName = "";
int versionCode = 0;
try {
PackageInfo pInfo = c.getPackageManager().getPackageInfo(c.getPackageName(), 0);
versionName = pInfo.versionName;
versionCode = pInfo.versionCode;
} catch (PackageManager.NameNotFoundException ignored) {
// This shouldn't happen.
}
return new MaterialAboutActionItem.Builder()
.text(text)
.subText(versionName + (includeVersionCode ? " (" + versionCode + ")" : ""))
.icon(icon)
.build();
}
public static MaterialAboutItemOnClickAction createWebViewDialogOnClickAction(final Context c, final CharSequence dialogTitle, final String htmlString, final boolean isStringUrl, final boolean supportZoom) {
return createWebViewDialogOnClickAction(c, dialogTitle, c.getString(R.string.mal_close), htmlString, isStringUrl, supportZoom);
}
public static MaterialAboutItemOnClickAction createWebViewDialogOnClickAction(final Context c, final CharSequence dialogTitle, final CharSequence dialogNegativeButton, final String htmlString, final boolean isStringUrl, final boolean supportZoom) {
return new MaterialAboutItemOnClickAction() {
@Override
public void onClick() {
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(c);
alertBuilder.setTitle(dialogTitle);
final WebView wv = new WebView(c);
wv.getSettings().setSupportZoom(supportZoom);
if (!supportZoom) {
wv.getSettings().setLoadWithOverviewMode(true);
wv.getSettings().setUseWideViewPort(true);
}
if (isStringUrl) {
wv.loadUrl(htmlString);
} else {
wv.loadData(htmlString, "text/html; charset=utf-8", "UTF-8");
}
alertBuilder.setView(wv);
alertBuilder.setNegativeButton(dialogNegativeButton, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
wv.destroy();
dialog.dismiss();
}
});
final AlertDialog dialog = alertBuilder.create();
dialog.show();
}
};
}
public static MaterialAboutActionItem createWebViewDialogItem(Context c, Drawable icon, CharSequence text, @Nullable CharSequence subText, CharSequence dialogTitle, String htmlString, boolean isStringUrl, boolean supportZoom) {
return createWebViewDialogItem(c, icon, text, subText, dialogTitle, c.getString(R.string.mal_close), htmlString, isStringUrl, supportZoom);
}
public static MaterialAboutActionItem createWebViewDialogItem(Context c, Drawable icon, CharSequence text, @Nullable CharSequence subText, CharSequence dialogTitle, CharSequence dialogNegativeButton, String htmlString, boolean isStringUrl, boolean supportZoom) {
return new MaterialAboutActionItem.Builder()
.text(text)
.subText(subText)
.icon(icon)
.setOnClickAction(createWebViewDialogOnClickAction(c, dialogTitle, dialogNegativeButton, htmlString, isStringUrl, supportZoom))
.build();
}
public static MaterialAboutItemOnClickAction createWebsiteOnClickAction(final Context c, final Uri websiteUrl) {
return new MaterialAboutItemOnClickAction() {
@Override
public void onClick() {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(websiteUrl);
try {
c.startActivity(i);
} catch (Exception e) {
// No activity to handle intent
Toast.makeText(c, R.string.mal_activity_exception, Toast.LENGTH_SHORT).show();
}
}
};
}
/**
* Creates an ActionItem which will open a url when tapped
*
* @param c context
* @param text
* @param icon
* @param websiteUrl (subText)
* @return Item to add to card.
*/
public static MaterialAboutActionItem createWebsiteActionItem(Context c, Drawable icon, CharSequence text, boolean showAddress, final Uri websiteUrl) {
return new MaterialAboutActionItem.Builder()
.text(text)
.subText((showAddress ? websiteUrl.toString() : null))
.icon(icon)
.setOnClickAction(createWebsiteOnClickAction(c, websiteUrl))
.build();
}
/**
* Creates a MaterialAboutItemOnClickAction that will open
* the Google Play store listing for the app.
*
* @param c context
* @return onClickAction
*/
public static MaterialAboutItemOnClickAction createRateOnClickAction(final Context c) {
Uri uri = Uri.parse("market://details?id=" + c.getPackageName());
final Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
} else {
goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
}
return new MaterialAboutItemOnClickAction() {
@Override
public void onClick() {
try {
c.startActivity(goToMarket);
} catch (ActivityNotFoundException e) {
c.startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("http://play.google.com/store/apps/details?id=" + c.getPackageName())));
}
}
};
}
/**
* Creates an ActionItem which will open the play store when tapped
*
* @param c context
* @param text
* @param subText
* @param icon
* @return Item to add to card.
*/
public static MaterialAboutActionItem createRateActionItem(Context c, Drawable icon, CharSequence text, @Nullable CharSequence subText) {
return new MaterialAboutActionItem.Builder()
.text(text)
.subText(subText)
.icon(icon)
.setOnClickAction(createRateOnClickAction(c))
.build();
}
public static MaterialAboutItemOnClickAction createEmailOnClickAction(final Context c, String email, String emailSubject) {
return createEmailOnClickAction(c, email, emailSubject, c.getString(R.string.mal_send_email));
}
/**
* Creates a MaterialAboutItemOnClickAction that will open
* an email intent with specified address.
*
* @param c context
* @param email email address
* @return onClickAction
*/
public static MaterialAboutItemOnClickAction createEmailOnClickAction(final Context c, String email, String emailSubject, final CharSequence chooserTitle) {
final Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:" + email));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, emailSubject);
return new MaterialAboutItemOnClickAction() {
@Override
public void onClick() {
try {
c.startActivity(Intent.createChooser(emailIntent, chooserTitle));
} catch (Exception e) {
// No activity to handle intent
Toast.makeText(c, R.string.mal_activity_exception, Toast.LENGTH_SHORT).show();
}
}
};
}
/**
* Creates an ActionItem which will open the an email intent when tapped
*
* @param c context
* @param text
* @param icon
* @param email email address (also used as subText)
* @return Item to add to card.
*/
public static MaterialAboutActionItem createEmailItem(Context c, Drawable icon, CharSequence text, boolean showEmail, String email, String emailSubject, CharSequence chooserTitle) {
return new MaterialAboutActionItem.Builder()
.text(text)
.subText((showEmail ? email : null))
.icon(icon)
.setOnClickAction(createEmailOnClickAction(c, email, emailSubject, chooserTitle))
.build();
}
public static MaterialAboutActionItem createEmailItem(Context c, Drawable icon, CharSequence text, boolean showEmail, String email, String emailSubject) {
return createEmailItem(c, icon, text, showEmail, email, emailSubject, c.getString(R.string.mal_send_email));
}
/**
* Creates a MaterialAboutItemOnClickAction that will open
* the dialer with specified number.
*
* @param c context
* @param number phone number
* @return onClickAction
*/
public static MaterialAboutItemOnClickAction createPhoneOnClickAction(final Context c, String number) {
final Intent phoneIntent = new Intent(Intent.ACTION_DIAL);
phoneIntent.setData(Uri.parse("tel:" + number));
return new MaterialAboutItemOnClickAction() {
@Override
public void onClick() {
try {
c.startActivity(phoneIntent);
} catch (Exception e) {
// No activity to handle intent
Toast.makeText(c, R.string.mal_activity_exception, Toast.LENGTH_SHORT).show();
}
}
};
}
/**
* Creates an ActionItem which will open the dialer when tapped
*
* @param c context
* @param text
* @param icon
* @param number phone number (also used as subText)
* @return Item to add to card.
*/
public static MaterialAboutActionItem createPhoneItem(Context c, Drawable icon, CharSequence text, boolean showNumber, String number) {
return new MaterialAboutActionItem.Builder()
.text(text)
.subText((showNumber ? number : null))
.icon(icon)
.setOnClickAction(createPhoneOnClickAction(c, number))
.build();
}
/**
* Creates a MaterialAboutItemOnClickAction that will open
* maps with a query.
* Query can be either lat,lng(label) or written address
*
* @param c context
* @param addressQuery address query
* @return onClickAction
*/
public static MaterialAboutItemOnClickAction createMapOnClickAction(final Context c, String addressQuery) {
final Intent mapIntent = new Intent(Intent.ACTION_VIEW);
mapIntent.setData(Uri.parse("geo:0,0").buildUpon().appendQueryParameter("q", addressQuery).build());
return new MaterialAboutItemOnClickAction() {
@Override
public void onClick() {
try {
c.startActivity(mapIntent);
} catch (Exception e) {
// No activity to handle intent
Toast.makeText(c, R.string.mal_activity_exception, Toast.LENGTH_SHORT).show();
}
}
};
}
/**
* Creates an ActionItem which will open maps when tapped
* Query can be either lat,lng(label) or written address
*
* @param c context
* @param text
* @param subText can be set to null
* @param icon
* @param addressQuery addressQuery
* @return Item to add to card.
*/
public static MaterialAboutActionItem createMapItem(Context c, Drawable icon, CharSequence text, CharSequence subText, String addressQuery) {
return new MaterialAboutActionItem.Builder()
.text(text)
.subText(subText)
.icon(icon)
.setOnClickAction(createMapOnClickAction(c, addressQuery))
.build();
}
public static MaterialAboutCard createLicenseCard(Context c, Drawable icon, CharSequence libraryTitle, CharSequence year, CharSequence name, OpenSourceLicense license) {
MaterialAboutActionItem licenseItem = new MaterialAboutActionItem.Builder()
.icon(icon)
.setIconGravity(MaterialAboutActionItem.GRAVITY_TOP)
.text(libraryTitle)
.subText(String.format(c.getString(license.getResourceId()), year, name))
.build();
return new MaterialAboutCard.Builder().addItem(licenseItem).build();
}
}

View File

@ -1,186 +0,0 @@
package com.danielstone.materialaboutlibrary;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.material.appbar.AppBarLayout;
import androidx.interpolator.view.animation.FastOutSlowInInterpolator;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.SimpleItemAnimator;
import androidx.appcompat.widget.Toolbar;
import android.util.TypedValue;
import android.view.MenuItem;
import com.danielstone.materialaboutlibrary.adapters.MaterialAboutListAdapter;
import com.danielstone.materialaboutlibrary.model.MaterialAboutList;
import com.danielstone.materialaboutlibrary.util.DefaultViewTypeManager;
import com.danielstone.materialaboutlibrary.util.ViewTypeManager;
import java.lang.ref.WeakReference;
public abstract class MaterialAboutActivity extends AppCompatActivity {
private MaterialAboutList list = new MaterialAboutList.Builder().build();
private Toolbar toolbar;
private RecyclerView recyclerView;
private MaterialAboutListAdapter adapter;
@NonNull
protected abstract MaterialAboutList getMaterialAboutList(@NonNull Context context);
@Nullable
protected abstract CharSequence getActivityTitle();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
verifyAttributesExist();
setContentView(R.layout.mal_material_about_activity);
CharSequence title = getActivityTitle();
if (title == null)
setTitle(R.string.mal_title_about);
else
setTitle(title);
assignViews();
initViews();
ListTask task = new ListTask(this);
task.execute();
}
private void verifyAttributesExist() {
TypedValue typedValue = new TypedValue();
boolean malColorPrimaryExists =
getTheme().resolveAttribute(R.attr.mal_color_primary, typedValue, true);
boolean malColorSecondaryExists =
getTheme().resolveAttribute(R.attr.mal_color_secondary, typedValue, true);
if (!malColorPrimaryExists || !malColorSecondaryExists) {
throw new IllegalStateException(String.format("The current theme doesn't provide %s " +
"and/or %s. Please use a theme provided by the library or an extension.",
getResources().getResourceEntryName(R.attr.mal_color_primary),
getResources().getResourceEntryName(R.attr.mal_color_secondary)));
}
}
private void assignViews() {
toolbar = (Toolbar) findViewById(R.id.mal_toolbar);
recyclerView = (RecyclerView) findViewById(R.id.mal_recyclerview);
recyclerView.setAlpha(0f);
recyclerView.setTranslationY(20);
}
private void initViews() {
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
adapter = new MaterialAboutListAdapter(getViewTypeManager());
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
RecyclerView.ItemAnimator animator = recyclerView.getItemAnimator();
if (animator instanceof SimpleItemAnimator) {
((SimpleItemAnimator) animator).setSupportsChangeAnimations(false);
}
}
@NonNull
protected ViewTypeManager getViewTypeManager() {
return new DefaultViewTypeManager();
}
@NonNull
protected MaterialAboutList getList() {
return list;
}
protected boolean shouldAnimate() {
return true;
}
protected void refreshMaterialAboutList() {
setMaterialAboutList(list);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
private void onTaskFinished(@Nullable MaterialAboutList materialAboutList) {
if (materialAboutList != null) {
list = materialAboutList;
adapter.setData(list.getCards());
if (shouldAnimate()) {
recyclerView.animate()
.alpha(1f)
.translationY(0f)
.setDuration(600)
.setInterpolator(new FastOutSlowInInterpolator()).start();
} else {
recyclerView.setAlpha(1f);
recyclerView.setTranslationY(0f);
}
} else {
finish();//?? why we remain here anyway?
}
}
protected void setMaterialAboutList(MaterialAboutList materialAboutList) {
list = materialAboutList;
adapter.setData(list.getCards());
}
protected void setScrollToolbar(boolean scrollToolbar) {
if (toolbar != null) {
AppBarLayout.LayoutParams params =
(AppBarLayout.LayoutParams) toolbar.getLayoutParams();
if (scrollToolbar) {
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL
| AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
} else {
params.setScrollFlags(0);
}
}
}
private static class ListTask extends AsyncTask<String, String, MaterialAboutList> {
private WeakReference<MaterialAboutActivity> context;
ListTask(MaterialAboutActivity context) {
this.context = new WeakReference<>(context);
}
@Override
protected MaterialAboutList doInBackground(String... params) {
return isCancelled() || context.get() == null ? null : context.get().getMaterialAboutList(context.get());
}
@Override
protected void onPostExecute(MaterialAboutList materialAboutList) {
super.onPostExecute(materialAboutList);
if (context.get() != null) {
if (!context.get().isFinishing()) {
context.get().onTaskFinished(materialAboutList);
}
}
context = null;
}
}
}

View File

@ -1,132 +0,0 @@
package com.danielstone.materialaboutlibrary;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.interpolator.view.animation.FastOutSlowInInterpolator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.SimpleItemAnimator;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.danielstone.materialaboutlibrary.adapters.MaterialAboutListAdapter;
import com.danielstone.materialaboutlibrary.model.MaterialAboutList;
import com.danielstone.materialaboutlibrary.util.DefaultViewTypeManager;
import com.danielstone.materialaboutlibrary.util.ViewTypeManager;
public abstract class MaterialAboutFragment extends Fragment {
private MaterialAboutList list = new MaterialAboutList.Builder().build();
private RecyclerView recyclerView;
private MaterialAboutListAdapter adapter;
public static MaterialAboutFragment newInstance(MaterialAboutFragment fragment) {
return fragment;
}
protected abstract MaterialAboutList getMaterialAboutList(Context activityContext);
protected int getTheme() {
return R.style.Theme_Mal_Light;
}
protected boolean shouldAnimate() {
return true;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
int style = getTheme();
// create ContextThemeWrapper from the original Activity Context with the custom theme
final Context contextThemeWrapper = new android.view.ContextThemeWrapper(getActivity(), style);
LayoutInflater localInflater = inflater.cloneInContext(contextThemeWrapper);
View rootView = localInflater.inflate(R.layout.mal_material_about_fragment, container, false);
recyclerView = (RecyclerView) rootView.findViewById(R.id.mal_recyclerview);
adapter = new MaterialAboutListAdapter(getViewTypeManager());
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setAdapter(adapter);
RecyclerView.ItemAnimator animator = recyclerView.getItemAnimator();
if (animator instanceof SimpleItemAnimator) {
((SimpleItemAnimator) animator).setSupportsChangeAnimations(false);
}
recyclerView.setAlpha(0f);
recyclerView.setTranslationY(20);
ListTask task = new ListTask(getActivity());
task.execute();
return rootView;
}
protected ViewTypeManager getViewTypeManager() {
return new DefaultViewTypeManager();
}
protected MaterialAboutList getList() {
return list;
}
protected void setMaterialAboutList(MaterialAboutList materialAboutList) {
//recyclerView.stopScroll();
//recyclerView.getRecycledViewPool().clear();
list = materialAboutList;
adapter.setData(list.getCards());
}
@Override
public void onPause() {
super.onPause();
}
protected void refreshMaterialAboutList() {
setMaterialAboutList(list);
}
private class ListTask extends AsyncTask<String, String, String> {
Context fragmentContext;
public ListTask(Context activityContext) {
this.fragmentContext = activityContext;
}
@Override
protected String doInBackground(String... params) {
list = getMaterialAboutList(fragmentContext);
return null;
}
@Override
protected void onPostExecute(String s) {
if (list == null)
return;// TODO: 2019-05-09 dirty fix tbh
adapter.setData(list.getCards());
if (shouldAnimate()) {
recyclerView.animate()
.alpha(1f)
.translationY(0f)
.setDuration(600)
.setInterpolator(new FastOutSlowInInterpolator())
.start();
} else {
recyclerView.setAlpha(1f);
recyclerView.setTranslationY(0f);
}
super.onPostExecute(s);
fragmentContext = null;
}
}
}

View File

@ -1,167 +0,0 @@
package com.danielstone.materialaboutlibrary.adapters;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.AsyncListDiffer;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.RecyclerView;
import com.danielstone.materialaboutlibrary.holders.MaterialAboutItemViewHolder;
import com.danielstone.materialaboutlibrary.items.MaterialAboutItem;
import com.danielstone.materialaboutlibrary.util.DefaultViewTypeManager;
import com.danielstone.materialaboutlibrary.util.ViewTypeManager;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class MaterialAboutItemAdapter extends RecyclerView.Adapter<MaterialAboutItemViewHolder> {
private final AsyncListDiffer<MaterialAboutItem> differ = new AsyncListDiffer<MaterialAboutItem>(this, DIFF_CALLBACK);
private ViewTypeManager viewTypeManager;
private Context context;
private List<MaterialAboutItem> data = new ArrayList<>();
private List<MaterialAboutItem> oldData = new ArrayList<>();
MaterialAboutItemAdapter() {
setHasStableIds(true);
this.viewTypeManager = new DefaultViewTypeManager();
}
MaterialAboutItemAdapter(ViewTypeManager customViewTypeManager) {
//Log.d("MaterialItem", "Created adapter");
setHasStableIds(true);
this.viewTypeManager = customViewTypeManager;
}
@NonNull
@Override
public MaterialAboutItemViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
context = viewGroup.getContext();
if (!(viewGroup instanceof RecyclerView)) {
throw new RuntimeException("Not bound to RecyclerView");
}
int layoutId = viewTypeManager.getLayout(viewType);
View view = LayoutInflater.from(viewGroup.getContext()).inflate(layoutId, viewGroup, false);
view.setFocusable(true);
return viewTypeManager.getViewHolder(viewType, view);
}
@Override
public void onBindViewHolder(MaterialAboutItemViewHolder holder, int position) {
/*if (data.get(position) instanceof MaterialAboutSwitchItem) {
Log.d("MaterialAdapter", "Item "+((MaterialAboutSwitchItem) data.get(position)).getText()+" checked "+((MaterialAboutSwitchItem) data.get(position)).getChecked());
}*/
//Log.d("MaterialItem", "Binding "+data.get(position).getDetailString());
viewTypeManager.setupItem(getItemViewType(position), holder, data.get(position), context);
}
@Override
public long getItemId(int position) {
return UUID.fromString(data.get(position).getId()).getMostSignificantBits() & Long.MAX_VALUE;
}
@Override
public int getItemCount() {
return data.size();
}
@Override
public int getItemViewType(int position) {
return data.get(position).getType();
}
public void setData(ArrayList<MaterialAboutItem> data) {
this.data = data;
notifyDataSetChanged();
// diff this with previous data
/*DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new MyDiffCallback(oldData, data));
try {
diffResult.dispatchUpdatesTo(this);
}
catch (IllegalStateException e) {
e.printStackTrace();
}
// clone the new data to make further diffs
oldData = new ArrayList<>();
for (MaterialAboutItem item : data) {
oldData.add(item.clone());
}*/
/*List<MaterialAboutItem> newData = new ArrayList<>();
for (MaterialAboutItem item : data) {
newData.add(item.clone());
}
differ.submitList(newData);*/
}
public List<MaterialAboutItem> getData() {
return data;
}
public static final DiffUtil.ItemCallback<MaterialAboutItem> DIFF_CALLBACK = new DiffUtil.ItemCallback<MaterialAboutItem>() {
@Override
public boolean areItemsTheSame(MaterialAboutItem oldItem, MaterialAboutItem newItem) {
return oldItem.getId().equals(newItem.getId());
}
@Override
public boolean areContentsTheSame(MaterialAboutItem oldItem, MaterialAboutItem newItem) {
return oldItem.getDetailString().equals(newItem.getDetailString());
}
};
public class MyDiffCallback extends DiffUtil.Callback{
List<MaterialAboutItem> oldPersons;
List<MaterialAboutItem> newPersons;
public MyDiffCallback(List<MaterialAboutItem> newPersons, List<MaterialAboutItem> oldPersons) {
this.newPersons = newPersons;
this.oldPersons = oldPersons;
}
@Override
public int getOldListSize() {
return oldPersons.size();
}
@Override
public int getNewListSize() {
return newPersons.size();
}
@Override
public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
return oldPersons.get(oldItemPosition).getId().equals(newPersons.get(newItemPosition).getId());
}
@Override
public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
return oldPersons.get(oldItemPosition).getDetailString().equals(newPersons.get(newItemPosition).getDetailString());
}
@Nullable
@Override
public Object getChangePayload(int oldItemPosition, int newItemPosition) {
//you can return particular field for changed item.
return super.getChangePayload(oldItemPosition, newItemPosition);
}
}
}

View File

@ -1,237 +0,0 @@
package com.danielstone.materialaboutlibrary.adapters;
import android.content.Context;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.AsyncListDiffer;
import androidx.recyclerview.widget.DiffUtil;
import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.danielstone.materialaboutlibrary.R;
import com.danielstone.materialaboutlibrary.model.MaterialAboutCard;
import com.danielstone.materialaboutlibrary.util.DefaultViewTypeManager;
import com.danielstone.materialaboutlibrary.util.ViewTypeManager;
import com.google.android.material.card.MaterialCardView;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class MaterialAboutListAdapter extends RecyclerView.Adapter<MaterialAboutListAdapter.MaterialAboutListViewHolder> {
private final AsyncListDiffer<MaterialAboutCard> differ = new AsyncListDiffer<MaterialAboutCard>(this, DIFF_CALLBACK);
private ViewTypeManager viewTypeManager;
private Context context;
private List<MaterialAboutCard> data = new ArrayList<>();
private List<MaterialAboutCard> oldData = new ArrayList<>();
public MaterialAboutListAdapter() {
setHasStableIds(true);
this.viewTypeManager = new DefaultViewTypeManager();
}
public MaterialAboutListAdapter(ViewTypeManager customViewTypeManager) {
//Log.d("MaterialList", "Created list adapter");
setHasStableIds(true);
this.viewTypeManager = customViewTypeManager;
}
@Override
public MaterialAboutListViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
context = viewGroup.getContext();
if (viewGroup instanceof RecyclerView) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.mal_material_about_list_card, viewGroup, false);
view.setFocusable(true);
return new MaterialAboutListViewHolder(view);
} else {
throw new RuntimeException("Not bound to RecyclerView");
}
}
@Override
public void onBindViewHolder(MaterialAboutListViewHolder holder, int position) {
MaterialAboutCard card = data.get(position);
if (holder.cardView instanceof CardView) {
CardView cardView = (CardView) holder.cardView;
int cardColor = card.getCardColor();
if (cardColor != 0) {
cardView.setCardBackgroundColor(cardColor);
}
}
CharSequence title = card.getTitle();
int titleRes = card.getTitleRes();
holder.title.setVisibility(View.VISIBLE);
if (title != null) {
holder.title.setText(title);
} else if (titleRes != 0) {
holder.title.setText(titleRes);
} else {
holder.title.setVisibility(View.GONE);
}
int titleColor = card.getTitleColor();
if (holder.title.getVisibility() == View.VISIBLE) {
if (titleColor != 0) {
holder.title.setTextColor(titleColor);
} else {
holder.title.setTextColor(holder.title.getTextColors().getDefaultColor());
}
}
if (card.getCustomAdapter() != null) {
holder.useCustomAdapter(card.getCustomAdapter());
} else {
holder.useMaterialAboutItemAdapter();
((MaterialAboutItemAdapter) holder.adapter).setData(card.getItems());
}
}
@Override
public long getItemId(int position) {
return UUID.fromString(data.get(position).getId()).getMostSignificantBits() & Long.MAX_VALUE;
}
@Override
public int getItemCount() {
return data.size();
}
public void setData(ArrayList<MaterialAboutCard> data) {
this.data = data;
notifyDataSetChanged();
/*// diff this with previous data
DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new MyDiffCallback(oldData, data));
try {
diffResult.dispatchUpdatesTo(this);
}
catch (IllegalStateException e) {
e.printStackTrace();
}
// clone the new data to make further diffs
oldData = new ArrayList<>();
for (MaterialAboutCard card : data) {
oldData.add(card.clone());
}*/
//differ.submitList(newData);
}
List<MaterialAboutCard> getData() {
return data;
}
class MaterialAboutListViewHolder extends RecyclerView.ViewHolder {
final View cardView;
final TextView title;
final RecyclerView recyclerView;
RecyclerView.Adapter adapter;
MaterialAboutListViewHolder(View view) {
super(view);
cardView = view.findViewById(R.id.mal_list_card);
title = (TextView) view.findViewById(R.id.mal_list_card_title);
recyclerView = (RecyclerView) view.findViewById(R.id.mal_card_recyclerview);
adapter = new MaterialAboutItemAdapter(viewTypeManager);
recyclerView.setLayoutManager(new LinearLayoutManager(context));
recyclerView.setAdapter(adapter);
recyclerView.setNestedScrollingEnabled(false);
}
public void useMaterialAboutItemAdapter() {
if (!(adapter instanceof MaterialAboutItemAdapter)) {
adapter = new MaterialAboutItemAdapter(viewTypeManager);
recyclerView.setLayoutManager(new LinearLayoutManager(context));
recyclerView.setAdapter(adapter);
}
}
public void useCustomAdapter(RecyclerView.Adapter newAdapter) {
if (adapter instanceof MaterialAboutItemAdapter) {
recyclerView.setLayoutManager(new LinearLayoutManager(context));
recyclerView.setAdapter(newAdapter);
}
}
}
public static final DiffUtil.ItemCallback<MaterialAboutCard> DIFF_CALLBACK = new DiffUtil.ItemCallback<MaterialAboutCard>() {
@Override
public boolean areItemsTheSame(MaterialAboutCard oldItem, MaterialAboutCard newItem) {
return oldItem.getId().equals(newItem.getId());
}
@Override
public boolean areContentsTheSame(MaterialAboutCard oldCard, MaterialAboutCard newCard) {
boolean result;
result = oldCard.toString().equals(newCard.toString());
if (oldCard.getItems().size() != newCard.getItems().size()) return false;
for (int i = 0; i < oldCard.getItems().size(); i++) {
if (!oldCard.getItems().get(i).getDetailString().equals(newCard.getItems().get(i).getDetailString())) return false;
}
return result;
}
};
public class MyDiffCallback extends DiffUtil.Callback{
List<MaterialAboutCard> oldPersons;
List<MaterialAboutCard> newPersons;
public MyDiffCallback(List<MaterialAboutCard> newPersons, List<MaterialAboutCard> oldPersons) {
this.newPersons = newPersons;
this.oldPersons = oldPersons;
}
@Override
public int getOldListSize() {
return oldPersons.size();
}
@Override
public int getNewListSize() {
return newPersons.size();
}
@Override
public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
return oldPersons.get(oldItemPosition).getId().equals(newPersons.get(newItemPosition).getId());
}
@Override
public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
boolean result;
result = oldPersons.get(oldItemPosition).toString().equals(newPersons.get(newItemPosition).toString());
if (oldPersons.get(oldItemPosition).getItems().size() != newPersons.get(newItemPosition).getItems().size()) return false;
for (int i = 0; i < oldPersons.get(oldItemPosition).getItems().size(); i++) {
if (!oldPersons.get(oldItemPosition).getItems().get(i).getDetailString().equals(newPersons.get(newItemPosition).getItems().get(i).getDetailString())) return false;
}
return result;
}
@Nullable
@Override
public Object getChangePayload(int oldItemPosition, int newItemPosition) {
//you can return particular field for changed item.
return super.getChangePayload(oldItemPosition, newItemPosition);
}
}
}

View File

@ -1,12 +0,0 @@
package com.danielstone.materialaboutlibrary.holders;
import androidx.recyclerview.widget.RecyclerView;
import android.view.View;
public abstract class MaterialAboutItemViewHolder extends RecyclerView.ViewHolder {
public MaterialAboutItemViewHolder(View itemView) {
super(itemView);
}
}

View File

@ -1,488 +0,0 @@
package com.danielstone.materialaboutlibrary.items;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build;
import androidx.annotation.ColorInt;
import androidx.annotation.DrawableRes;
import androidx.annotation.IntDef;
import androidx.annotation.StringRes;
import android.text.Html;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.danielstone.materialaboutlibrary.R;
import com.danielstone.materialaboutlibrary.holders.MaterialAboutItemViewHolder;
import com.danielstone.materialaboutlibrary.util.ViewTypeManager;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import static android.view.View.GONE;
public class MaterialAboutActionItem extends MaterialAboutItem {
public static final int GRAVITY_TOP = 0;
public static final int GRAVITY_MIDDLE = 1;
public static final int GRAVITY_BOTTOM = 2;
private CharSequence text = null;
private int textRes = 0;
private CharSequence subText = null;
private int subTextRes = 0;
private int textColor = -1;
private int subTextColor = -1;
private Drawable icon = null;
private int iconRes = 0;
private boolean showIcon = true;
private int iconGravity = GRAVITY_MIDDLE;
private MaterialAboutItemOnClickAction onClickAction = null;
private MaterialAboutItemOnClickAction onLongClickAction = null;
private MaterialAboutActionItem(Builder builder) {
super();
this.text = builder.text;
this.textRes = builder.textRes;
this.subText = builder.subText;
this.subTextRes = builder.subTextRes;
this.textColor = builder.textColor;
this.subTextColor = builder.subTextColor;
this.icon = builder.icon;
this.iconRes = builder.iconRes;
this.showIcon = builder.showIcon;
this.iconGravity = builder.iconGravity;
this.onClickAction = builder.onClickAction;
this.onLongClickAction = builder.onLongClickAction;
}
public MaterialAboutActionItem(CharSequence text, CharSequence subText, Drawable icon, MaterialAboutItemOnClickAction onClickAction) {
this.text = text;
this.subText = subText;
this.icon = icon;
this.onClickAction = onClickAction;
}
public MaterialAboutActionItem(CharSequence text, CharSequence subText, Drawable icon) {
this.text = text;
this.subText = subText;
this.icon = icon;
}
public MaterialAboutActionItem(int textRes, int subTextRes, int iconRes, MaterialAboutItemOnClickAction onClickAction) {
this.textRes = textRes;
this.subTextRes = subTextRes;
this.iconRes = iconRes;
this.onClickAction = onClickAction;
}
public MaterialAboutActionItem(int textRes, int subTextRes, int iconRes) {
this.textRes = textRes;
this.subTextRes = subTextRes;
this.iconRes = iconRes;
}
public static MaterialAboutItemViewHolder getViewHolder(View view) {
return new MaterialAboutActionItemViewHolder(view);
}
public static void setupItem(MaterialAboutActionItemViewHolder holder, MaterialAboutActionItem item, Context context) {
CharSequence text = item.getText();
int textRes = item.getTextRes();
holder.text.setVisibility(View.VISIBLE);
if (text != null) {
holder.text.setText(text);
} else if (textRes != 0) {
holder.text.setText(textRes);
} else {
holder.text.setVisibility(GONE);
}
CharSequence subText = item.getSubText();
int subTextRes = item.getSubTextRes();
holder.subText.setVisibility(View.VISIBLE);
if (subText != null) {
holder.subText.setText(subText);
} else if (subTextRes != 0) {
holder.subText.setText(subTextRes);
} else {
holder.subText.setVisibility(GONE);
}
if (item.getTextColor() != -1) {
holder.text.setTextColor(item.getTextColor());
}
if (item.getSubTextColor() != -1) {
holder.subText.setTextColor(item.getSubTextColor());
}
if (item.shouldShowIcon()) {
holder.icon.setVisibility(View.VISIBLE);
Drawable drawable = item.getIcon();
int drawableRes = item.getIconRes();
if (drawable != null) {
holder.icon.setImageDrawable(drawable);
} else if (drawableRes != 0) {
holder.icon.setImageResource(drawableRes);
}
} else {
holder.icon.setVisibility(GONE);
}
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) holder.icon.getLayoutParams();
switch (item.getIconGravity()) {
case MaterialAboutActionItem.GRAVITY_TOP:
params.gravity = Gravity.TOP;
break;
case MaterialAboutActionItem.GRAVITY_MIDDLE:
params.gravity = Gravity.CENTER_VERTICAL;
break;
case MaterialAboutActionItem.GRAVITY_BOTTOM:
params.gravity = Gravity.BOTTOM;
break;
}
holder.icon.setLayoutParams(params);
int pL = 0, pT = 0, pR = 0, pB = 0;
if (Build.VERSION.SDK_INT < 21) {
pL = holder.view.getPaddingLeft();
pT = holder.view.getPaddingTop();
pR = holder.view.getPaddingRight();
pB = holder.view.getPaddingBottom();
}
if (item.getOnClickAction() != null || item.getOnLongClickAction() != null) {
TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(R.attr.selectableItemBackground, outValue, true);
holder.view.setBackgroundResource(outValue.resourceId);
} else {
holder.view.setBackgroundResource(0);
}
holder.setOnClickAction(item.getOnClickAction());
holder.setOnLongClickAction(item.getOnLongClickAction());
if (Build.VERSION.SDK_INT < 21) {
holder.view.setPadding(pL, pT, pR, pB);
}
}
@Override
public int getType() {
return ViewTypeManager.ItemType.ACTION_ITEM;
}
@Override
public String getDetailString() {
return "MaterialAboutActionItem{" +
"text=" + text +
", textRes=" + textRes +
", subText=" + subText +
", subTextRes=" + subTextRes +
", textColor=" + textColor +
", descColor=" + subTextColor +
", icon=" + icon +
", iconRes=" + iconRes +
", showIcon=" + showIcon +
", iconGravity=" + iconGravity +
", onClickAction=" + onClickAction +
", onLongClickAction=" + onLongClickAction +
'}';
}
public MaterialAboutActionItem(MaterialAboutActionItem item) {
this.id = item.getId();
this.text = item.getText();
this.textRes = item.getTextRes();
this.subText = item.getSubText();
this.subTextRes = item.getSubTextRes();
this.textColor = item.getTextColor();
this.subTextColor = item.getSubTextColor();
this.icon = item.getIcon();
this.iconRes = item.getIconRes();
this.showIcon = item.showIcon;
this.iconGravity = item.iconGravity;
this.onClickAction = item.onClickAction;
this.onLongClickAction = item.onLongClickAction;
}
@Override
public MaterialAboutItem clone() {
return new MaterialAboutActionItem(this);
}
public CharSequence getText() {
return text;
}
public MaterialAboutActionItem setText(CharSequence text) {
this.textRes = 0;
this.text = text;
return this;
}
public int getTextRes() {
return textRes;
}
public MaterialAboutActionItem setTextRes(int textRes) {
this.text = null;
this.textRes = textRes;
return this;
}
public CharSequence getSubText() {
return subText;
}
public MaterialAboutActionItem setSubText(CharSequence subText) {
this.subTextRes = 0;
this.subText = subText;
return this;
}
public int getSubTextRes() {
return subTextRes;
}
public MaterialAboutActionItem setSubTextRes(int subTextRes) {
this.subText = null;
this.subTextRes = subTextRes;
return this;
}
public int getTextColor() {
return textColor;
}
public MaterialAboutActionItem setTextColor(int textColor) {
this.textColor = textColor;
return this;
}
public int getSubTextColor() {
return subTextColor;
}
public MaterialAboutActionItem setSubTextColor(int subTextColor) {
this.subTextColor = subTextColor;
return this;
}
public Drawable getIcon() {
return icon;
}
public MaterialAboutActionItem setIcon(Drawable icon) {
this.iconRes = 0;
this.icon = icon;
return this;
}
public int getIconRes() {
return iconRes;
}
public MaterialAboutActionItem setIconRes(int iconRes) {
this.icon = null;
this.iconRes = iconRes;
return this;
}
public boolean shouldShowIcon() {
return showIcon;
}
public MaterialAboutActionItem setShouldShowIcon(boolean showIcon) {
this.showIcon = showIcon;
return this;
}
@IconGravity
public int getIconGravity() {
return iconGravity;
}
public MaterialAboutActionItem setIconGravity(int iconGravity) {
this.iconGravity = iconGravity;
return this;
}
public MaterialAboutItemOnClickAction getOnClickAction() {
return onClickAction;
}
public MaterialAboutActionItem setOnClickAction(MaterialAboutItemOnClickAction onClickAction) {
this.onClickAction = onClickAction;
return this;
}
public MaterialAboutItemOnClickAction getOnLongClickAction() {
return onLongClickAction;
}
public MaterialAboutActionItem setOnLongClickAction(MaterialAboutItemOnClickAction onLongClickAction) {
this.onLongClickAction = onLongClickAction;
return this;
}
@Retention(RetentionPolicy.SOURCE)
@IntDef({GRAVITY_TOP, GRAVITY_MIDDLE, GRAVITY_BOTTOM})
public @interface IconGravity {
}
public static class MaterialAboutActionItemViewHolder extends MaterialAboutItemViewHolder implements View.OnClickListener, View.OnLongClickListener {
public final View view;
public final ImageView icon;
public final TextView text;
public final TextView subText;
private MaterialAboutItemOnClickAction onClickAction;
private MaterialAboutItemOnClickAction onLongClickAction;
MaterialAboutActionItemViewHolder(View view) {
super(view);
this.view = view;
icon = (ImageView) view.findViewById(R.id.mal_item_image);
text = (TextView) view.findViewById(R.id.mal_item_text);
subText = (TextView) view.findViewById(R.id.mal_action_item_subtext);
}
public void setOnClickAction(MaterialAboutItemOnClickAction onClickAction) {
this.onClickAction = onClickAction;
view.setOnClickListener(onClickAction != null ? this : null);
}
public void setOnLongClickAction(MaterialAboutItemOnClickAction onLongClickAction) {
this.onLongClickAction = onLongClickAction;
view.setOnLongClickListener(onLongClickAction != null ? this : null);
}
@Override
public void onClick(View v) {
if (onClickAction != null) {
onClickAction.onClick();
}
}
@Override
public boolean onLongClick(View v) {
if (onLongClickAction != null) {
onLongClickAction.onClick();
return true;
}
return false;
}
}
public static class Builder {
MaterialAboutItemOnClickAction onClickAction = null;
MaterialAboutItemOnClickAction onLongClickAction = null;
private CharSequence text = null;
@StringRes
private int textRes = 0;
private CharSequence subText = null;
@StringRes
private int subTextRes = 0;
@ColorInt
private int textColor = -1;
@ColorInt
private int subTextColor = -1;
private Drawable icon = null;
@DrawableRes
private int iconRes = 0;
private boolean showIcon = true;
@IconGravity
private int iconGravity = GRAVITY_MIDDLE;
public Builder text(CharSequence text) {
this.text = text;
this.textRes = 0;
return this;
}
public Builder text(@StringRes int text) {
this.textRes = text;
this.text = null;
return this;
}
public Builder subText(CharSequence subText) {
this.subText = subText;
this.subTextRes = 0;
return this;
}
public Builder subText(@StringRes int subTextRes) {
this.subText = null;
this.subTextRes = subTextRes;
return this;
}
public Builder textColor(@ColorInt int textColor) {
this.textColor = textColor;
return this;
}
public Builder subTextColor(@ColorInt int subTextColor) {
this.subTextColor = subTextColor;
return this;
}
public Builder subTextHtml(String subTextHtml) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
this.subText = Html.fromHtml(subTextHtml, Html.FROM_HTML_MODE_LEGACY);
} else {
//noinspection deprecation
this.subText = Html.fromHtml(subTextHtml);
}
this.subTextRes = 0;
return this;
}
public Builder icon(Drawable icon) {
this.icon = icon;
this.iconRes = 0;
return this;
}
public Builder icon(@DrawableRes int iconRes) {
this.icon = null;
this.iconRes = iconRes;
return this;
}
public Builder showIcon(boolean showIcon) {
this.showIcon = showIcon;
return this;
}
public Builder setIconGravity(@IconGravity int iconGravity) {
this.iconGravity = iconGravity;
return this;
}
public Builder setOnClickAction(MaterialAboutItemOnClickAction onClickAction) {
this.onClickAction = onClickAction;
return this;
}
public Builder setOnLongClickAction(MaterialAboutItemOnClickAction onLongClickAction) {
this.onLongClickAction = onLongClickAction;
return this;
}
public MaterialAboutActionItem build() {
return new MaterialAboutActionItem(this);
}
}
}

View File

@ -1,606 +0,0 @@
package com.danielstone.materialaboutlibrary.items;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build;
import androidx.annotation.DrawableRes;
import androidx.annotation.IntDef;
import androidx.annotation.StringRes;
import androidx.appcompat.widget.SwitchCompat;
import android.text.Html;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Switch;
import android.widget.TextView;
import com.danielstone.materialaboutlibrary.R;
import com.danielstone.materialaboutlibrary.holders.MaterialAboutItemViewHolder;
import com.danielstone.materialaboutlibrary.util.ViewTypeManager;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import static android.view.View.GONE;
public class MaterialAboutActionSwitchItem extends MaterialAboutItem {
public static final int GRAVITY_TOP = 0;
public static final int GRAVITY_MIDDLE = 1;
public static final int GRAVITY_BOTTOM = 2;
private CharSequence text = null;
private int textRes = 0;
private CharSequence subText = null;
private int subTextRes = 0;
private CharSequence subTextChecked = null;
private int subTextCheckedRes = 0;
private Drawable icon = null;
private int iconRes = 0;
private boolean showIcon = true;
private int iconGravity = GRAVITY_MIDDLE;
private boolean checked = false;
private int tag = -1;
private MaterialAboutItemOnClickAction onClickAction = null;
private MaterialAboutItemOnClickAction onLongClickAction = null;
private MaterialAboutItemOnChangeAction onChangeAction = null;
private MaterialAboutActionSwitchItem(Builder builder) {
super();
this.text = builder.text;
this.textRes = builder.textRes;
this.subText = builder.subText;
this.subTextRes = builder.subTextRes;
this.subTextChecked = builder.subTextChecked;
this.subTextCheckedRes = builder.subTextCheckedRes;
this.icon = builder.icon;
this.iconRes = builder.iconRes;
this.showIcon = builder.showIcon;
this.iconGravity = builder.iconGravity;
this.checked = builder.checked;
this.tag = builder.tag;
this.onClickAction = builder.onClickAction;
this.onLongClickAction = builder.onLongClickAction;
this.onChangeAction = builder.onChangeAction;
}
public MaterialAboutActionSwitchItem(CharSequence text, CharSequence subText, Drawable icon, MaterialAboutItemOnChangeAction onChangeAction) {
this.text = text;
this.subText = subText;
this.icon = icon;
this.onChangeAction = onChangeAction;
}
public MaterialAboutActionSwitchItem(CharSequence text, CharSequence subText, Drawable icon) {
this.text = text;
this.subText = subText;
this.icon = icon;
}
public MaterialAboutActionSwitchItem(int textRes, int subTextRes, int iconRes, MaterialAboutItemOnChangeAction onChangeAction) {
this.textRes = textRes;
this.subTextRes = subTextRes;
this.iconRes = iconRes;
this.onChangeAction = onChangeAction;
}
public MaterialAboutActionSwitchItem(int textRes, int subTextRes, int iconRes) {
this.textRes = textRes;
this.subTextRes = subTextRes;
this.iconRes = iconRes;
}
public static void setupItem(MaterialAboutActionSwitchItemViewHolder holder, MaterialAboutActionSwitchItem item, Context context) {
holder.switchItem = item;
CharSequence text = item.getText();
int textRes = item.getTextRes();
holder.text.setVisibility(View.VISIBLE);
if (text != null) {
holder.text.setText(text);
} else if (textRes != 0) {
holder.text.setText(textRes);
} else {
holder.text.setVisibility(GONE);
}
CharSequence subText = item.getSubText();
int subTextRes = item.getSubTextRes();
holder.subText.setVisibility(View.VISIBLE);
if (subText != null) {
holder.subText.setText(subText);
} else if (subTextRes != 0) {
holder.subText.setText(subTextRes);
} else {
holder.subText.setVisibility(GONE);
}
if (item.shouldShowIcon()) {
holder.icon.setVisibility(View.VISIBLE);
Drawable drawable = item.getIcon();
int drawableRes = item.getIconRes();
if (drawable != null) {
holder.icon.setImageDrawable(drawable);
} else if (drawableRes != 0) {
holder.icon.setImageResource(drawableRes);
}
} else {
holder.icon.setVisibility(GONE);
}
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) holder.icon.getLayoutParams();
switch (item.getIconGravity()) {
case MaterialAboutActionSwitchItem.GRAVITY_TOP:
params.gravity = Gravity.TOP;
break;
case MaterialAboutActionSwitchItem.GRAVITY_MIDDLE:
params.gravity = Gravity.CENTER_VERTICAL;
break;
case MaterialAboutActionSwitchItem.GRAVITY_BOTTOM:
params.gravity = Gravity.BOTTOM;
break;
}
holder.icon.setLayoutParams(params);
int pL = 0, pT = 0, pR = 0, pB = 0;
if (Build.VERSION.SDK_INT < 21) {
pL = holder.view.getPaddingLeft();
pT = holder.view.getPaddingTop();
pR = holder.view.getPaddingRight();
pB = holder.view.getPaddingBottom();
}
holder.setChecked(item.getChecked());
if (item.getOnChangeAction() != null || item.getOnClickAction() != null || item.getOnLongClickAction() != null) {
TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(R.attr.selectableItemBackground, outValue, true);
holder.view.setBackgroundResource(outValue.resourceId);
} else {
holder.view.setBackgroundResource(0);
}
holder.setOnClickAction(item.getOnClickAction());
holder.setOnLongClickAction(item.getOnLongClickAction());
holder.setOnChangeAction(item.getOnChangeAction());
if (Build.VERSION.SDK_INT < 21) {
holder.view.setPadding(pL, pT, pR, pB);
}
}
public static MaterialAboutItemViewHolder getViewHolder(View view) {
return new MaterialAboutActionSwitchItemViewHolder(view);
}
public static class MaterialAboutActionSwitchItemViewHolder extends MaterialAboutItemViewHolder implements View.OnClickListener, View.OnLongClickListener, CompoundButton.OnCheckedChangeListener {
public final View view;
public final ImageView icon;
public final TextView text;
public final TextView subText;
public final SwitchCompat switchView;
private MaterialAboutItemOnClickAction onClickAction;
private MaterialAboutItemOnClickAction onLongClickAction;
private MaterialAboutItemOnChangeAction onChangeAction;
private MaterialAboutActionSwitchItem switchItem;
MaterialAboutActionSwitchItemViewHolder(View view) {
super(view);
this.view = view.findViewById(R.id.mal_action_root);
icon = view.findViewById(R.id.mal_item_image);
text = view.findViewById(R.id.mal_item_text);
subText = view.findViewById(R.id.mal_action_item_subtext);
switchView = view.findViewById(R.id.mal_switch);
}
public void setOnClickAction(MaterialAboutItemOnClickAction onClickAction) {
this.onClickAction = onClickAction;
view.setOnClickListener(onClickAction != null ? this : null);
}
public void setOnLongClickAction(MaterialAboutItemOnClickAction onLongClickAction) {
this.onLongClickAction = onLongClickAction;
view.setOnLongClickListener(onLongClickAction != null ? this : null);
}
public void setOnChangeAction(MaterialAboutItemOnChangeAction onChangeAction) {
this.onChangeAction = onChangeAction;
switchView.setOnCheckedChangeListener(this);
}
public void setChecked(boolean checked) {
switchView.setChecked(checked);
switchItem.checked = checked;
updateSubText(checked);
}
public void updateSubText(boolean checked) {
if (checked && switchItem.subTextChecked != null) {
subText.setText(switchItem.subTextChecked);
}
else if (checked && switchItem.subTextCheckedRes != 0) {
subText.setText(switchItem.subTextCheckedRes);
}
else if (switchItem.subText != null) {
subText.setText(switchItem.subText);
}
else if (switchItem.subTextRes != 0) {
subText.setText(switchItem.subTextRes);
}
}
@Override
public void onClick(View v) {
if (onClickAction != null) {
onClickAction.onClick();
}
}
@Override
public boolean onLongClick(View v) {
if (onLongClickAction != null) {
onLongClickAction.onClick();
return true;
}
return false;
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
updateSubText(isChecked);
if (onChangeAction != null) {
if (!onChangeAction.onChange(isChecked, switchItem.getTag())) {
setChecked(!isChecked);
}
else {
switchItem.checked = isChecked;
}
}
else {
setChecked(!isChecked);
}
}
}
@Override
public int getType() {
return ViewTypeManager.ItemType.ACTION_SWITCH_ITEM;
}
@Override
public String getDetailString() {
return "MaterialAboutActionSwitchItem{" +
"text=" + text +
", textRes=" + textRes +
", subText=" + subText +
", subTextRes=" + subTextRes +
", subTextChecked=" + subTextChecked +
", subTextCheckedRes=" + subTextCheckedRes +
", icon=" + icon +
", iconRes=" + iconRes +
", showIcon=" + showIcon +
", iconGravity=" + iconGravity +
", checked=" + checked +
", tag=" + tag +
", onClickAction=" + onClickAction +
", onLongClickAction=" + onLongClickAction +
", onChangeAction=" + onChangeAction +
'}';
}
public MaterialAboutActionSwitchItem(MaterialAboutActionSwitchItem item) {
this.id = item.getId();
this.text = item.getText();
this.textRes = item.getTextRes();
this.subText = item.getSubText();
this.subTextRes = item.getSubTextRes();
this.subTextChecked = item.getSubTextChecked();
this.subTextCheckedRes = item.getSubTextCheckedRes();
this.icon = item.getIcon();
this.iconRes = item.getIconRes();
this.showIcon = item.showIcon;
this.iconGravity = item.iconGravity;
this.checked = item.checked;
this.tag = item.tag;
this.onClickAction = item.onClickAction;
this.onLongClickAction = item.onLongClickAction;
this.onChangeAction = item.onChangeAction;
}
@Override
public MaterialAboutItem clone() {
return new MaterialAboutActionSwitchItem(this);
}
public int getTag() {
return tag;
}
public MaterialAboutActionSwitchItem setTag(int tag) {
this.tag = tag;
return this;
}
public CharSequence getText() {
return text;
}
public MaterialAboutActionSwitchItem setText(CharSequence text) {
this.textRes = 0;
this.text = text;
return this;
}
public int getTextRes() {
return textRes;
}
public MaterialAboutActionSwitchItem setTextRes(int textRes) {
this.text = null;
this.textRes = textRes;
return this;
}
public CharSequence getSubText() {
return subText;
}
public MaterialAboutActionSwitchItem setSubText(CharSequence subText) {
this.subTextRes = 0;
this.subText = subText;
return this;
}
public int getSubTextRes() {
return subTextRes;
}
public MaterialAboutActionSwitchItem setSubTextRes(int subTextRes) {
this.subText = null;
this.subTextRes = subTextRes;
return this;
}
public CharSequence getSubTextChecked() {
return subTextChecked;
}
public MaterialAboutActionSwitchItem setSubTextChecked(CharSequence subTextChecked) {
this.subTextCheckedRes = 0;
this.subTextChecked = subTextChecked;
return this;
}
public int getSubTextCheckedRes() {
return subTextCheckedRes;
}
public MaterialAboutActionSwitchItem setSubTextCheckedRes(int subTextCheckedRes) {
this.subTextChecked = null;
this.subTextCheckedRes = subTextCheckedRes;
return this;
}
public Drawable getIcon() {
return icon;
}
public MaterialAboutActionSwitchItem setIcon(Drawable icon) {
this.iconRes = 0;
this.icon = icon;
return this;
}
public int getIconRes() {
return iconRes;
}
public MaterialAboutActionSwitchItem setIconRes(int iconRes) {
this.icon = null;
this.iconRes = iconRes;
return this;
}
public boolean shouldShowIcon() {
return showIcon;
}
public MaterialAboutActionSwitchItem setShouldShowIcon(boolean showIcon) {
this.showIcon = showIcon;
return this;
}
@IconGravity
public int getIconGravity() {
return iconGravity;
}
public MaterialAboutActionSwitchItem setIconGravity(int iconGravity) {
this.iconGravity = iconGravity;
return this;
}
public boolean getChecked() {
return checked;
}
public MaterialAboutActionSwitchItem setChecked(boolean checked) {
this.checked = checked;
return this;
}
public MaterialAboutItemOnClickAction getOnClickAction() {
return onClickAction;
}
public MaterialAboutActionSwitchItem setOnClickAction(MaterialAboutItemOnClickAction onClickAction) {
this.onClickAction = onClickAction;
return this;
}
public MaterialAboutItemOnClickAction getOnLongClickAction() {
return onLongClickAction;
}
public MaterialAboutActionSwitchItem setOnLongClickAction(MaterialAboutItemOnClickAction onLongClickAction) {
this.onLongClickAction = onLongClickAction;
return this;
}
public MaterialAboutItemOnChangeAction getOnChangeAction() {
return onChangeAction;
}
public MaterialAboutActionSwitchItem setOnChangeAction(MaterialAboutItemOnChangeAction onChangeAction) {
this.onChangeAction = onChangeAction;
return this;
}
@Retention(RetentionPolicy.SOURCE)
@IntDef({GRAVITY_TOP, GRAVITY_MIDDLE, GRAVITY_BOTTOM})
public @interface IconGravity {
}
public static class Builder {
MaterialAboutItemOnClickAction onClickAction = null;
MaterialAboutItemOnClickAction onLongClickAction = null;
MaterialAboutItemOnChangeAction onChangeAction = null;
private CharSequence text = null;
@StringRes
private int textRes = 0;
private CharSequence subText = null;
@StringRes
private int subTextRes = 0;
private CharSequence subTextChecked = null;
@StringRes
private int subTextCheckedRes = 0;
private Drawable icon = null;
@DrawableRes
private int iconRes = 0;
private boolean showIcon = true;
@IconGravity
private int iconGravity = GRAVITY_MIDDLE;
private boolean checked = false;
private int tag = -1;
public Builder tag(int tag) {
this.tag = tag;
return this;
}
public Builder text(CharSequence text) {
this.text = text;
this.textRes = 0;
return this;
}
public Builder text(@StringRes int text) {
this.textRes = text;
this.text = null;
return this;
}
public Builder subText(CharSequence subText) {
this.subText = subText;
this.subTextRes = 0;
return this;
}
public Builder subText(@StringRes int subTextRes) {
this.subText = null;
this.subTextRes = subTextRes;
return this;
}
public Builder subTextHtml(String subTextHtml) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
this.subText = Html.fromHtml(subTextHtml, Html.FROM_HTML_MODE_LEGACY);
} else {
//noinspection deprecation
this.subText = Html.fromHtml(subTextHtml);
}
this.subTextRes = 0;
return this;
}
public Builder subTextChecked(CharSequence subTextChecked) {
this.subTextChecked = subTextChecked;
this.subTextCheckedRes = 0;
return this;
}
public Builder subTextChecked(@StringRes int subTextCheckedRes) {
this.subTextChecked = null;
this.subTextCheckedRes = subTextCheckedRes;
return this;
}
public Builder subTextCheckedHtml(String subTextCheckedHtml) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
this.subTextChecked = Html.fromHtml(subTextCheckedHtml, Html.FROM_HTML_MODE_LEGACY);
} else {
//noinspection deprecation
this.subTextChecked = Html.fromHtml(subTextCheckedHtml);
}
this.subTextCheckedRes = 0;
return this;
}
public Builder icon(Drawable icon) {
this.icon = icon;
this.iconRes = 0;
return this;
}
public Builder icon(@DrawableRes int iconRes) {
this.icon = null;
this.iconRes = iconRes;
return this;
}
public Builder showIcon(boolean showIcon) {
this.showIcon = showIcon;
return this;
}
public Builder setIconGravity(@IconGravity int iconGravity) {
this.iconGravity = iconGravity;
return this;
}
public Builder setOnClickAction(MaterialAboutItemOnClickAction onClickAction) {
this.onClickAction = onClickAction;
return this;
}
public Builder setOnLongClickAction(MaterialAboutItemOnClickAction onLongClickAction) {
this.onLongClickAction = onLongClickAction;
return this;
}
public Builder setOnChangeAction(MaterialAboutItemOnChangeAction onChangeAction) {
this.onChangeAction = onChangeAction;
return this;
}
public Builder checked(boolean isChecked) {
this.checked = isChecked;
return this;
}
public MaterialAboutActionSwitchItem build() {
return new MaterialAboutActionSwitchItem(this);
}
}
}

View File

@ -1,538 +0,0 @@
package com.danielstone.materialaboutlibrary.items;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build;
import androidx.annotation.DrawableRes;
import androidx.annotation.IntDef;
import androidx.annotation.StringRes;
import android.text.Html;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.danielstone.materialaboutlibrary.R;
import com.danielstone.materialaboutlibrary.holders.MaterialAboutItemViewHolder;
import com.danielstone.materialaboutlibrary.util.ViewTypeManager;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import static android.view.View.GONE;
public class MaterialAboutCheckboxItem extends MaterialAboutItem {
public static final int GRAVITY_TOP = 0;
public static final int GRAVITY_MIDDLE = 1;
public static final int GRAVITY_BOTTOM = 2;
private CharSequence text = null;
private int textRes = 0;
private CharSequence subText = null;
private int subTextRes = 0;
private CharSequence subTextChecked = null;
private int subTextCheckedRes = 0;
private Drawable icon = null;
private int iconRes = 0;
private boolean showIcon = true;
private int iconGravity = GRAVITY_MIDDLE;
private boolean checked = false;
private int tag = -1;
private MaterialAboutItemOnChangeAction onChangeAction = null;
private MaterialAboutCheckboxItem(Builder builder) {
super();
this.text = builder.text;
this.textRes = builder.textRes;
this.subText = builder.subText;
this.subTextRes = builder.subTextRes;
this.subTextChecked = builder.subTextChecked;
this.subTextCheckedRes = builder.subTextCheckedRes;
this.icon = builder.icon;
this.iconRes = builder.iconRes;
this.showIcon = builder.showIcon;
this.iconGravity = builder.iconGravity;
this.checked = builder.checked;
this.tag = builder.tag;
this.onChangeAction = builder.onChangeAction;
}
public MaterialAboutCheckboxItem(CharSequence text, CharSequence subText, Drawable icon, MaterialAboutItemOnChangeAction onChangeAction) {
this.text = text;
this.subText = subText;
this.icon = icon;
this.onChangeAction = onChangeAction;
}
public MaterialAboutCheckboxItem(CharSequence text, CharSequence subText, Drawable icon) {
this.text = text;
this.subText = subText;
this.icon = icon;
}
public MaterialAboutCheckboxItem(int textRes, int subTextRes, int iconRes, MaterialAboutItemOnChangeAction onChangeAction) {
this.textRes = textRes;
this.subTextRes = subTextRes;
this.iconRes = iconRes;
this.onChangeAction = onChangeAction;
}
public MaterialAboutCheckboxItem(int textRes, int subTextRes, int iconRes) {
this.textRes = textRes;
this.subTextRes = subTextRes;
this.iconRes = iconRes;
}
public static MaterialAboutItemViewHolder getViewHolder(View view) {
return new MaterialAboutCheckboxItemViewHolder(view);
}
public static void setupItem(MaterialAboutCheckboxItemViewHolder holder, MaterialAboutCheckboxItem item, Context context) {
holder.switchItem = item;
CharSequence text = item.getText();
int textRes = item.getTextRes();
holder.text.setVisibility(View.VISIBLE);
if (text != null) {
holder.text.setText(text);
} else if (textRes != 0) {
holder.text.setText(textRes);
} else {
holder.text.setVisibility(GONE);
}
CharSequence subText = item.getSubText();
int subTextRes = item.getSubTextRes();
holder.subText.setVisibility(View.VISIBLE);
if (subText != null) {
holder.subText.setText(subText);
} else if (subTextRes != 0) {
holder.subText.setText(subTextRes);
} else {
holder.subText.setVisibility(GONE);
}
if (item.shouldShowIcon()) {
holder.icon.setVisibility(View.VISIBLE);
Drawable drawable = item.getIcon();
int drawableRes = item.getIconRes();
if (drawable != null) {
holder.icon.setImageDrawable(drawable);
} else if (drawableRes != 0) {
holder.icon.setImageResource(drawableRes);
}
} else {
holder.icon.setVisibility(GONE);
}
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) holder.icon.getLayoutParams();
switch (item.getIconGravity()) {
case MaterialAboutCheckboxItem.GRAVITY_TOP:
params.gravity = Gravity.TOP;
break;
case MaterialAboutCheckboxItem.GRAVITY_MIDDLE:
params.gravity = Gravity.CENTER_VERTICAL;
break;
case MaterialAboutCheckboxItem.GRAVITY_BOTTOM:
params.gravity = Gravity.BOTTOM;
break;
}
holder.icon.setLayoutParams(params);
int pL = 0, pT = 0, pR = 0, pB = 0;
if (Build.VERSION.SDK_INT < 21) {
pL = holder.view.getPaddingLeft();
pT = holder.view.getPaddingTop();
pR = holder.view.getPaddingRight();
pB = holder.view.getPaddingBottom();
}
if (item.getOnChangeAction() != null) {
TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(R.attr.selectableItemBackground, outValue, true);
holder.view.setBackgroundResource(outValue.resourceId);
} else {
holder.view.setBackgroundResource(0);
}
holder.setOnChangeAction(item.getOnChangeAction());
if (Build.VERSION.SDK_INT < 21) {
holder.view.setPadding(pL, pT, pR, pB);
}
}
@Override
public int getType() {
return ViewTypeManager.ItemType.CHECKBOX_ITEM;
}
@Override
public String getDetailString() {
return "MaterialAboutCheckboxItem{" +
"text=" + text +
", textRes=" + textRes +
", subText=" + subText +
", subTextRes=" + subTextRes +
", subTextChecked=" + subTextChecked +
", subTextCheckedRes=" + subTextCheckedRes +
", icon=" + icon +
", iconRes=" + iconRes +
", showIcon=" + showIcon +
", iconGravity=" + iconGravity +
", checked=" + checked +
", tag=" + tag +
", onChangeAction=" + onChangeAction +
'}';
}
public MaterialAboutCheckboxItem(MaterialAboutCheckboxItem item) {
this.id = item.getId();
this.text = item.getText();
this.textRes = item.getTextRes();
this.subText = item.getSubText();
this.subTextRes = item.getSubTextRes();
this.subTextChecked = item.getSubTextChecked();
this.subTextCheckedRes = item.getSubTextCheckedRes();
this.icon = item.getIcon();
this.iconRes = item.getIconRes();
this.showIcon = item.showIcon;
this.iconGravity = item.iconGravity;
this.checked = item.checked;
this.tag = item.tag;
this.onChangeAction = item.onChangeAction;
}
@Override
public MaterialAboutItem clone() {
return new MaterialAboutCheckboxItem(this);
}
public int getTag() {
return tag;
}
public MaterialAboutCheckboxItem setTag(int tag) {
this.tag = tag;
return this;
}
public CharSequence getText() {
return text;
}
public MaterialAboutCheckboxItem setText(CharSequence text) {
this.textRes = 0;
this.text = text;
return this;
}
public int getTextRes() {
return textRes;
}
public MaterialAboutCheckboxItem setTextRes(int textRes) {
this.text = null;
this.textRes = textRes;
return this;
}
public CharSequence getSubText() {
return subText;
}
public MaterialAboutCheckboxItem setSubText(CharSequence subText) {
this.subTextRes = 0;
this.subText = subText;
return this;
}
public int getSubTextRes() {
return subTextRes;
}
public MaterialAboutCheckboxItem setSubTextRes(int subTextRes) {
this.subText = null;
this.subTextRes = subTextRes;
return this;
}
public CharSequence getSubTextChecked() {
return subTextChecked;
}
public MaterialAboutCheckboxItem setSubTextChecked(CharSequence subTextChecked) {
this.subTextCheckedRes = 0;
this.subTextChecked = subTextChecked;
return this;
}
public int getSubTextCheckedRes() {
return subTextCheckedRes;
}
public MaterialAboutCheckboxItem setSubTextCheckedRes(int subTextCheckedRes) {
this.subTextChecked = null;
this.subTextCheckedRes = subTextCheckedRes;
return this;
}
public Drawable getIcon() {
return icon;
}
public MaterialAboutCheckboxItem setIcon(Drawable icon) {
this.iconRes = 0;
this.icon = icon;
return this;
}
public int getIconRes() {
return iconRes;
}
public MaterialAboutCheckboxItem setIconRes(int iconRes) {
this.icon = null;
this.iconRes = iconRes;
return this;
}
public boolean shouldShowIcon() {
return showIcon;
}
public MaterialAboutCheckboxItem setShouldShowIcon(boolean showIcon) {
this.showIcon = showIcon;
return this;
}
@IconGravity
public int getIconGravity() {
return iconGravity;
}
public MaterialAboutCheckboxItem setIconGravity(int iconGravity) {
this.iconGravity = iconGravity;
return this;
}
public boolean getChecked() {
return checked;
}
public MaterialAboutCheckboxItem setChecked(boolean checked) {
this.checked = checked;
return this;
}
public MaterialAboutItemOnChangeAction getOnChangeAction() {
return onChangeAction;
}
public MaterialAboutCheckboxItem setOnChangeAction(MaterialAboutItemOnChangeAction onChangeAction) {
this.onChangeAction = onChangeAction;
return this;
}
@Retention(RetentionPolicy.SOURCE)
@IntDef({GRAVITY_TOP, GRAVITY_MIDDLE, GRAVITY_BOTTOM})
public @interface IconGravity {
}
public static class MaterialAboutCheckboxItemViewHolder extends MaterialAboutItemViewHolder implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {
public final View view;
public final ImageView icon;
public final TextView text;
public final TextView subText;
public final CheckBox checkBox;
private MaterialAboutItemOnChangeAction onChangeAction;
private MaterialAboutCheckboxItem switchItem;
MaterialAboutCheckboxItemViewHolder(View view) {
super(view);
this.view = view;
icon = view.findViewById(R.id.mal_item_image);
text = view.findViewById(R.id.mal_item_text);
subText = view.findViewById(R.id.mal_action_item_subtext);
checkBox = view.findViewById(R.id.mal_checkbox);
}
public void setOnChangeAction(MaterialAboutItemOnChangeAction onChangeAction) {
this.onChangeAction = onChangeAction;
view.setOnClickListener(onChangeAction != null ? this : null);
checkBox.setOnCheckedChangeListener(this);
}
public void setChecked(boolean checked) {
checkBox.setOnCheckedChangeListener(null);
checkBox.setChecked(checked);
checkBox.setOnCheckedChangeListener(this);
updateSubText(checked);
}
public void updateSubText(boolean checked) {
if (checked && switchItem.subTextChecked != null) {
subText.setText(switchItem.subTextChecked);
}
else if (checked && switchItem.subTextCheckedRes != 0) {
subText.setText(switchItem.subTextCheckedRes);
}
else if (switchItem.subText != null) {
subText.setText(switchItem.subText);
}
else if (switchItem.subTextRes != 0) {
subText.setText(switchItem.subTextRes);
}
}
@Override
public void onClick(View v) {
checkBox.toggle();
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
updateSubText(isChecked);
if (onChangeAction != null) {
if (!onChangeAction.onChange(isChecked, switchItem.getTag()))
setChecked(!isChecked);
}
else {
setChecked(!isChecked);
}
}
}
public static class Builder {
MaterialAboutItemOnChangeAction onChangeAction = null;
private CharSequence text = null;
@StringRes
private int textRes = 0;
private CharSequence subText = null;
@StringRes
private int subTextRes = 0;
private CharSequence subTextChecked = null;
@StringRes
private int subTextCheckedRes = 0;
private Drawable icon = null;
@DrawableRes
private int iconRes = 0;
private boolean showIcon = true;
@IconGravity
private int iconGravity = GRAVITY_MIDDLE;
private boolean checked = false;
private int tag = -1;
public Builder tag(int tag) {
this.tag = tag;
return this;
}
public Builder text(CharSequence text) {
this.text = text;
this.textRes = 0;
return this;
}
public Builder text(@StringRes int text) {
this.textRes = text;
this.text = null;
return this;
}
public Builder subText(CharSequence subText) {
this.subText = subText;
this.subTextRes = 0;
return this;
}
public Builder subText(@StringRes int subTextRes) {
this.subText = null;
this.subTextRes = subTextRes;
return this;
}
public Builder subTextHtml(String subTextHtml) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
this.subText = Html.fromHtml(subTextHtml, Html.FROM_HTML_MODE_LEGACY);
} else {
//noinspection deprecation
this.subText = Html.fromHtml(subTextHtml);
}
this.subTextRes = 0;
return this;
}
public Builder subTextChecked(CharSequence subTextChecked) {
this.subTextChecked = subTextChecked;
this.subTextCheckedRes = 0;
return this;
}
public Builder subTextChecked(@StringRes int subTextCheckedRes) {
this.subTextChecked = null;
this.subTextCheckedRes = subTextCheckedRes;
return this;
}
public Builder subTextCheckedHtml(String subTextCheckedHtml) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
this.subTextChecked = Html.fromHtml(subTextCheckedHtml, Html.FROM_HTML_MODE_LEGACY);
} else {
//noinspection deprecation
this.subTextChecked = Html.fromHtml(subTextCheckedHtml);
}
this.subTextCheckedRes = 0;
return this;
}
public Builder icon(Drawable icon) {
this.icon = icon;
this.iconRes = 0;
return this;
}
public Builder icon(@DrawableRes int iconRes) {
this.icon = null;
this.iconRes = iconRes;
return this;
}
public Builder showIcon(boolean showIcon) {
this.showIcon = showIcon;
return this;
}
public Builder setIconGravity(@IconGravity int iconGravity) {
this.iconGravity = iconGravity;
return this;
}
public Builder setOnChangeAction(MaterialAboutItemOnChangeAction onChangeAction) {
this.onChangeAction = onChangeAction;
return this;
}
public Builder checked(boolean isChecked) {
this.checked = isChecked;
return this;
}
public MaterialAboutCheckboxItem build() {
return new MaterialAboutCheckboxItem(this);
}
}
}

View File

@ -1,23 +0,0 @@
package com.danielstone.materialaboutlibrary.items;
import java.util.UUID;
public abstract class MaterialAboutItem {
public String id = "NO-UUID";
public MaterialAboutItem() {
this.id = UUID.randomUUID().toString();
}
public String getId() {
return id;
}
public abstract int getType();
public abstract String getDetailString();
public abstract MaterialAboutItem clone();
}

View File

@ -1,5 +0,0 @@
package com.danielstone.materialaboutlibrary.items;
public interface MaterialAboutItemOnChangeAction {
boolean onChange(boolean isChecked, int tag);
}

View File

@ -1,5 +0,0 @@
package com.danielstone.materialaboutlibrary.items;
public interface MaterialAboutItemOnClickAction {
void onClick();
}

View File

@ -1,352 +0,0 @@
package com.danielstone.materialaboutlibrary.items;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build;
import androidx.annotation.DrawableRes;
import androidx.annotation.StringRes;
import android.util.Log;
import android.util.TypedValue;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.danielstone.materialaboutlibrary.R;
import com.danielstone.materialaboutlibrary.holders.MaterialAboutItemViewHolder;
import com.danielstone.materialaboutlibrary.util.ViewTypeManager;
import static android.view.View.GONE;
public class MaterialAboutProfileItem extends MaterialAboutItem {
private CharSequence text = null;
private int textRes = 0;
private CharSequence desc = null;
private int descRes = 0;
private Drawable icon = null;
private int iconRes = 0;
private MaterialAboutItemOnClickAction onClickAction = null;
private MaterialAboutItemOnClickAction onLongClickAction = null;
private MaterialAboutProfileItem(MaterialAboutProfileItem.Builder builder) {
super();
this.text = builder.text;
this.textRes = builder.textRes;
this.desc = builder.desc;
this.descRes = builder.descRes;
this.icon = builder.icon;
this.iconRes = builder.iconRes;
this.onClickAction = builder.onClickAction;
this.onLongClickAction = builder.onLongClickAction;
}
public MaterialAboutProfileItem(CharSequence text, CharSequence desc, Drawable icon) {
this.text = text;
this.desc = desc;
this.icon = icon;
}
public MaterialAboutProfileItem(int textRes, int descRes, int iconRes) {
this.textRes = textRes;
this.descRes = descRes;
this.iconRes = iconRes;
}
public static MaterialAboutItemViewHolder getViewHolder(View view) {
return new MaterialAboutProfileItem.MaterialAboutProfileItemViewHolder(view);
}
public static void setupItem(MaterialAboutProfileItemViewHolder holder, MaterialAboutProfileItem item, Context context) {
CharSequence text = item.getText();
int textRes = item.getTextRes();
holder.text.setVisibility(View.VISIBLE);
if (text != null) {
holder.text.setText(text);
} else if (textRes != 0) {
holder.text.setText(textRes);
} else {
holder.text.setVisibility(GONE);
}
CharSequence desc = item.getDesc();
int descRes = item.getDescRes();
holder.desc.setVisibility(View.VISIBLE);
if (desc != null) {
holder.desc.setText(desc);
} else if (descRes != 0) {
holder.desc.setText(descRes);
} else {
holder.desc.setVisibility(GONE);
}
Drawable drawable = item.getIcon();
int drawableRes = item.getIconRes();
if (drawable != null) {
holder.icon.setImageDrawable(drawable);
} else if (drawableRes != 0) {
holder.icon.setImageResource(drawableRes);
}
int pL = 0, pT = 0, pR = 0, pB = 0;
if (Build.VERSION.SDK_INT < 21) {
pL = holder.view.getPaddingLeft();
pT = holder.view.getPaddingTop();
pR = holder.view.getPaddingRight();
pB = holder.view.getPaddingBottom();
}
if (item.getOnClickAction() != null || item.getOnLongClickAction() != null) {
TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(R.attr.selectableItemBackground, outValue, true);
holder.view.setBackgroundResource(outValue.resourceId);
} else {
holder.view.setBackgroundResource(0);
}
holder.setOnClickAction(item.getOnClickAction());
holder.setOnLongClickAction(item.getOnLongClickAction());
if (Build.VERSION.SDK_INT < 21) {
holder.view.setPadding(pL, pT, pR, pB);
}
}
@Override
public int getType() {
return ViewTypeManager.ItemType.PROFILE_ITEM;
}
@Override
public String getDetailString() {
return "MaterialAboutProfileItem{" +
"text=" + text +
", textRes=" + textRes +
", desc=" + desc +
", descRes=" + descRes +
", icon=" + icon +
", iconRes=" + iconRes +
", onClickAction=" + onClickAction +
", onLongClickAction=" + onLongClickAction +
'}';
}
public MaterialAboutProfileItem(MaterialAboutProfileItem item) {
this.id = item.getId();
this.text = item.getText();
this.textRes = item.getTextRes();
this.desc = item.getDesc();
this.descRes = item.getDescRes();
this.icon = item.getIcon();
this.iconRes = item.getIconRes();
this.onClickAction = item.getOnClickAction();
this.onLongClickAction = item.getOnLongClickAction();
}
@Override
public MaterialAboutProfileItem clone() {
return new MaterialAboutProfileItem(this);
}
public CharSequence getText() {
return text;
}
public MaterialAboutProfileItem setText(CharSequence text) {
this.textRes = 0;
this.text = text;
return this;
}
public int getTextRes() {
return textRes;
}
public MaterialAboutProfileItem setTextRes(int textRes) {
this.text = null;
this.textRes = textRes;
return this;
}
public CharSequence getDesc() {
return desc;
}
public MaterialAboutProfileItem setDesc(CharSequence desc) {
this.descRes = 0;
this.desc = desc;
return this;
}
public int getDescRes() {
return descRes;
}
public MaterialAboutProfileItem setDescRes(int descRes) {
this.desc = null;
this.descRes = textRes;
return this;
}
public Drawable getIcon() {
return icon;
}
public MaterialAboutProfileItem setIcon(Drawable icon) {
this.iconRes = 0;
this.icon = icon;
return this;
}
public int getIconRes() {
return iconRes;
}
public MaterialAboutProfileItem setIconRes(int iconRes) {
this.icon = null;
this.iconRes = iconRes;
return this;
}
public MaterialAboutItemOnClickAction getOnClickAction() {
return onClickAction;
}
public MaterialAboutProfileItem setOnClickAction(MaterialAboutItemOnClickAction onClickAction) {
this.onClickAction = onClickAction;
return this;
}
public MaterialAboutItemOnClickAction getOnLongClickAction() {
return onLongClickAction;
}
public MaterialAboutProfileItem setOnLongClickAction(MaterialAboutItemOnClickAction onLongClickAction) {
this.onLongClickAction = onLongClickAction;
return this;
}
public static class MaterialAboutProfileItemViewHolder extends MaterialAboutItemViewHolder implements View.OnClickListener, View.OnLongClickListener {
public final View view;
public final ImageView icon;
public final TextView text;
public final TextView desc;
private MaterialAboutItemOnClickAction onClickAction;
private MaterialAboutItemOnClickAction onLongClickAction;
MaterialAboutProfileItemViewHolder(View view) {
super(view);
this.view = view;
icon = (ImageView) view.findViewById(R.id.mal_item_image);
text = (TextView) view.findViewById(R.id.mal_item_text);
desc = (TextView) view.findViewById(R.id.mal_item_desc);
}
public void setOnClickAction(MaterialAboutItemOnClickAction onClickAction) {
this.onClickAction = onClickAction;
if (onClickAction != null) {
view.setOnClickListener(this);
} else {
view.setClickable(false);
}
}
public void setOnLongClickAction(MaterialAboutItemOnClickAction onLongClickAction) {
this.onLongClickAction = onLongClickAction;
if (onLongClickAction != null) {
view.setOnLongClickListener(this);
} else {
view.setLongClickable(false);
}
}
@Override
public void onClick(View v) {
if (onClickAction != null) {
onClickAction.onClick();
}
}
@Override
public boolean onLongClick(View v) {
if (onLongClickAction != null) {
onLongClickAction.onClick();
return true;
}
return false;
}
}
public static class Builder {
MaterialAboutItemOnClickAction onClickAction = null;
MaterialAboutItemOnClickAction onLongClickAction = null;
private CharSequence text = null;
@StringRes
private int textRes = 0;
private CharSequence desc = null;
@StringRes
private int descRes = 0;
private Drawable icon = null;
@DrawableRes
private int iconRes = 0;
public MaterialAboutProfileItem.Builder text(CharSequence text) {
this.text = text;
this.textRes = 0;
return this;
}
public MaterialAboutProfileItem.Builder text(@StringRes int text) {
this.textRes = text;
this.text = null;
return this;
}
public MaterialAboutProfileItem.Builder desc(CharSequence desc) {
this.desc = desc;
this.descRes = 0;
return this;
}
public MaterialAboutProfileItem.Builder desc(@StringRes int desc) {
this.descRes = desc;
this.desc = null;
return this;
}
public MaterialAboutProfileItem.Builder icon(Drawable icon) {
this.icon = icon;
this.iconRes = 0;
return this;
}
public MaterialAboutProfileItem.Builder icon(@DrawableRes int iconRes) {
this.icon = null;
this.iconRes = iconRes;
return this;
}
public MaterialAboutProfileItem.Builder setOnClickAction(MaterialAboutItemOnClickAction onClickAction) {
this.onClickAction = onClickAction;
return this;
}
public MaterialAboutProfileItem.Builder setOnLongClickAction(MaterialAboutItemOnClickAction onLongClickAction) {
this.onLongClickAction = onLongClickAction;
return this;
}
public MaterialAboutProfileItem build() {
return new MaterialAboutProfileItem(this);
}
}
}

View File

@ -1,548 +0,0 @@
package com.danielstone.materialaboutlibrary.items;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build;
import androidx.annotation.DrawableRes;
import androidx.annotation.IntDef;
import androidx.annotation.StringRes;
import androidx.appcompat.widget.SwitchCompat;
import android.text.Html;
import android.util.Log;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Switch;
import android.widget.TextView;
import com.danielstone.materialaboutlibrary.R;
import com.danielstone.materialaboutlibrary.holders.MaterialAboutItemViewHolder;
import com.danielstone.materialaboutlibrary.util.ViewTypeManager;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import static android.view.View.GONE;
public class MaterialAboutSwitchItem extends MaterialAboutItem {
public static final int GRAVITY_TOP = 0;
public static final int GRAVITY_MIDDLE = 1;
public static final int GRAVITY_BOTTOM = 2;
private CharSequence text = null;
private int textRes = 0;
private CharSequence subText = null;
private int subTextRes = 0;
private CharSequence subTextChecked = null;
private int subTextCheckedRes = 0;
private Drawable icon = null;
private int iconRes = 0;
private boolean showIcon = true;
private int iconGravity = GRAVITY_MIDDLE;
private boolean checked = false;
private int tag = -1;
private MaterialAboutItemOnChangeAction onChangeAction = null;
private MaterialAboutSwitchItem(Builder builder) {
super();
this.text = builder.text;
this.textRes = builder.textRes;
this.subText = builder.subText;
this.subTextRes = builder.subTextRes;
this.subTextChecked = builder.subTextChecked;
this.subTextCheckedRes = builder.subTextCheckedRes;
this.icon = builder.icon;
this.iconRes = builder.iconRes;
this.showIcon = builder.showIcon;
this.iconGravity = builder.iconGravity;
this.checked = builder.checked;
this.tag = builder.tag;
this.onChangeAction = builder.onChangeAction;
}
public MaterialAboutSwitchItem(CharSequence text, CharSequence subText, Drawable icon, MaterialAboutItemOnChangeAction onChangeAction) {
this.text = text;
this.subText = subText;
this.icon = icon;
this.onChangeAction = onChangeAction;
}
public MaterialAboutSwitchItem(CharSequence text, CharSequence subText, Drawable icon) {
this.text = text;
this.subText = subText;
this.icon = icon;
}
public MaterialAboutSwitchItem(int textRes, int subTextRes, int iconRes, MaterialAboutItemOnChangeAction onChangeAction) {
this.textRes = textRes;
this.subTextRes = subTextRes;
this.iconRes = iconRes;
this.onChangeAction = onChangeAction;
}
public MaterialAboutSwitchItem(int textRes, int subTextRes, int iconRes) {
this.textRes = textRes;
this.subTextRes = subTextRes;
this.iconRes = iconRes;
}
public static void setupItem(MaterialAboutSwitchItemViewHolder holder, MaterialAboutSwitchItem item, Context context) {
holder.switchItem = item;
CharSequence text = item.getText();
int textRes = item.getTextRes();
holder.text.setVisibility(View.VISIBLE);
if (text != null) {
holder.text.setText(text);
} else if (textRes != 0) {
holder.text.setText(textRes);
} else {
holder.text.setVisibility(GONE);
}
CharSequence subText = item.getSubText();
int subTextRes = item.getSubTextRes();
holder.subText.setVisibility(View.VISIBLE);
if (subText != null) {
holder.subText.setText(subText);
} else if (subTextRes != 0) {
holder.subText.setText(subTextRes);
} else {
holder.subText.setVisibility(GONE);
}
if (item.shouldShowIcon()) {
holder.icon.setVisibility(View.VISIBLE);
Drawable drawable = item.getIcon();
int drawableRes = item.getIconRes();
if (drawable != null) {
holder.icon.setImageDrawable(drawable);
} else if (drawableRes != 0) {
holder.icon.setImageResource(drawableRes);
}
} else {
holder.icon.setVisibility(GONE);
}
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) holder.icon.getLayoutParams();
switch (item.getIconGravity()) {
case MaterialAboutSwitchItem.GRAVITY_TOP:
params.gravity = Gravity.TOP;
break;
case MaterialAboutSwitchItem.GRAVITY_MIDDLE:
params.gravity = Gravity.CENTER_VERTICAL;
break;
case MaterialAboutSwitchItem.GRAVITY_BOTTOM:
params.gravity = Gravity.BOTTOM;
break;
}
holder.icon.setLayoutParams(params);
int pL = 0, pT = 0, pR = 0, pB = 0;
if (Build.VERSION.SDK_INT < 21) {
pL = holder.view.getPaddingLeft();
pT = holder.view.getPaddingTop();
pR = holder.view.getPaddingRight();
pB = holder.view.getPaddingBottom();
}
holder.setChecked(item.getChecked());
if (item.getOnChangeAction() != null) {
TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(R.attr.selectableItemBackground, outValue, true);
holder.view.setBackgroundResource(outValue.resourceId);
} else {
holder.view.setBackgroundResource(0);
}
holder.setOnChangeAction(item.getOnChangeAction());
if (Build.VERSION.SDK_INT < 21) {
holder.view.setPadding(pL, pT, pR, pB);
}
}
public static MaterialAboutItemViewHolder getViewHolder(View view) {
return new MaterialAboutSwitchItemViewHolder(view);
}
public static class MaterialAboutSwitchItemViewHolder extends MaterialAboutItemViewHolder implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {
public final View view;
public final ImageView icon;
public final TextView text;
public final TextView subText;
public final SwitchCompat switchView;
private MaterialAboutItemOnChangeAction onChangeAction;
private MaterialAboutSwitchItem switchItem;
MaterialAboutSwitchItemViewHolder(View view) {
super(view);
this.view = view;
icon = view.findViewById(R.id.mal_item_image);
text = view.findViewById(R.id.mal_item_text);
subText = view.findViewById(R.id.mal_action_item_subtext);
switchView = view.findViewById(R.id.mal_switch);
}
public void setOnChangeAction(MaterialAboutItemOnChangeAction onChangeAction) {
this.onChangeAction = onChangeAction;
view.setOnClickListener(onChangeAction != null ? this : null);
switchView.setOnCheckedChangeListener(this);
}
public void setChecked(boolean checked) {
switchView.setOnCheckedChangeListener(null);
switchView.setChecked(checked);
switchView.setOnCheckedChangeListener(this);
switchItem.setChecked(checked);
updateSubText(checked);
}
public void updateSubText(boolean checked) {
if (checked && switchItem.subTextChecked != null) {
subText.setText(switchItem.subTextChecked);
}
else if (checked && switchItem.subTextCheckedRes != 0) {
subText.setText(switchItem.subTextCheckedRes);
}
else if (switchItem.subText != null) {
subText.setText(switchItem.subText);
}
else if (switchItem.subTextRes != 0) {
subText.setText(switchItem.subTextRes);
}
}
@Override
public void onClick(View v) {
switchView.toggle();
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
updateSubText(isChecked);
if (onChangeAction != null) {
if (!onChangeAction.onChange(isChecked, switchItem.getTag())) {
setChecked(!isChecked);
}
else {
switchItem.setChecked(isChecked);
}
}
else {
setChecked(!isChecked);
}
}
}
@Override
public int getType() {
return ViewTypeManager.ItemType.SWITCH_ITEM;
}
@Override
public String getDetailString() {
return "MaterialAboutSwitchItem{" +
"text=" + text +
", textRes=" + textRes +
", subText=" + subText +
", subTextRes=" + subTextRes +
", subTextChecked=" + subTextChecked +
", subTextCheckedRes=" + subTextCheckedRes +
", icon=" + icon +
", iconRes=" + iconRes +
", showIcon=" + showIcon +
", iconGravity=" + iconGravity +
", checked=" + checked +
", tag=" + tag +
", onChangeAction=" + onChangeAction +
'}';
}
public MaterialAboutSwitchItem(MaterialAboutSwitchItem item) {
this.id = item.getId();
this.text = item.getText();
this.textRes = item.getTextRes();
this.subText = item.getSubText();
this.subTextRes = item.getSubTextRes();
this.subTextChecked = item.getSubTextChecked();
this.subTextCheckedRes = item.getSubTextCheckedRes();
this.icon = item.getIcon();
this.iconRes = item.getIconRes();
this.showIcon = item.showIcon;
this.iconGravity = item.iconGravity;
this.checked = item.checked;
this.tag = item.tag;
this.onChangeAction = item.onChangeAction;
}
@Override
public MaterialAboutItem clone() {
return new MaterialAboutSwitchItem(this);
}
public int getTag() {
return tag;
}
public MaterialAboutSwitchItem setTag(int tag) {
this.tag = tag;
return this;
}
public CharSequence getText() {
return text;
}
public MaterialAboutSwitchItem setText(CharSequence text) {
this.textRes = 0;
this.text = text;
return this;
}
public int getTextRes() {
return textRes;
}
public MaterialAboutSwitchItem setTextRes(int textRes) {
this.text = null;
this.textRes = textRes;
return this;
}
public CharSequence getSubText() {
return subText;
}
public MaterialAboutSwitchItem setSubText(CharSequence subText) {
this.subTextRes = 0;
this.subText = subText;
return this;
}
public int getSubTextRes() {
return subTextRes;
}
public MaterialAboutSwitchItem setSubTextRes(int subTextRes) {
this.subText = null;
this.subTextRes = subTextRes;
return this;
}
public CharSequence getSubTextChecked() {
return subTextChecked;
}
public MaterialAboutSwitchItem setSubTextChecked(CharSequence subTextChecked) {
this.subTextCheckedRes = 0;
this.subTextChecked = subTextChecked;
return this;
}
public int getSubTextCheckedRes() {
return subTextCheckedRes;
}
public MaterialAboutSwitchItem setSubTextCheckedRes(int subTextCheckedRes) {
this.subTextChecked = null;
this.subTextCheckedRes = subTextCheckedRes;
return this;
}
public Drawable getIcon() {
return icon;
}
public MaterialAboutSwitchItem setIcon(Drawable icon) {
this.iconRes = 0;
this.icon = icon;
return this;
}
public int getIconRes() {
return iconRes;
}
public MaterialAboutSwitchItem setIconRes(int iconRes) {
this.icon = null;
this.iconRes = iconRes;
return this;
}
public boolean shouldShowIcon() {
return showIcon;
}
public MaterialAboutSwitchItem setShouldShowIcon(boolean showIcon) {
this.showIcon = showIcon;
return this;
}
@IconGravity
public int getIconGravity() {
return iconGravity;
}
public MaterialAboutSwitchItem setIconGravity(int iconGravity) {
this.iconGravity = iconGravity;
return this;
}
public boolean getChecked() {
return checked;
}
public MaterialAboutSwitchItem setChecked(boolean checked) {
//Log.d("MaterialItem", "Setting item "+getText()+" to checked "+checked);
this.checked = checked;
return this;
}
public MaterialAboutItemOnChangeAction getOnChangeAction() {
return onChangeAction;
}
public MaterialAboutSwitchItem setOnChangeAction(MaterialAboutItemOnChangeAction onChangeAction) {
this.onChangeAction = onChangeAction;
return this;
}
@Retention(RetentionPolicy.SOURCE)
@IntDef({GRAVITY_TOP, GRAVITY_MIDDLE, GRAVITY_BOTTOM})
public @interface IconGravity {
}
public static class Builder {
MaterialAboutItemOnChangeAction onChangeAction = null;
private CharSequence text = null;
@StringRes
private int textRes = 0;
private CharSequence subText = null;
@StringRes
private int subTextRes = 0;
private CharSequence subTextChecked = null;
@StringRes
private int subTextCheckedRes = 0;
private Drawable icon = null;
@DrawableRes
private int iconRes = 0;
private boolean showIcon = true;
@IconGravity
private int iconGravity = GRAVITY_MIDDLE;
private boolean checked = false;
private int tag = -1;
public Builder tag(int tag) {
this.tag = tag;
return this;
}
public Builder text(CharSequence text) {
this.text = text;
this.textRes = 0;
return this;
}
public Builder text(@StringRes int text) {
this.textRes = text;
this.text = null;
return this;
}
public Builder subText(CharSequence subText) {
this.subText = subText;
this.subTextRes = 0;
return this;
}
public Builder subText(@StringRes int subTextRes) {
this.subText = null;
this.subTextRes = subTextRes;
return this;
}
public Builder subTextHtml(String subTextHtml) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
this.subText = Html.fromHtml(subTextHtml, Html.FROM_HTML_MODE_LEGACY);
} else {
//noinspection deprecation
this.subText = Html.fromHtml(subTextHtml);
}
this.subTextRes = 0;
return this;
}
public Builder subTextChecked(CharSequence subTextChecked) {
this.subTextChecked = subTextChecked;
this.subTextCheckedRes = 0;
return this;
}
public Builder subTextChecked(@StringRes int subTextCheckedRes) {
this.subTextChecked = null;
this.subTextCheckedRes = subTextCheckedRes;
return this;
}
public Builder subTextCheckedHtml(String subTextCheckedHtml) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
this.subTextChecked = Html.fromHtml(subTextCheckedHtml, Html.FROM_HTML_MODE_LEGACY);
} else {
//noinspection deprecation
this.subTextChecked = Html.fromHtml(subTextCheckedHtml);
}
this.subTextCheckedRes = 0;
return this;
}
public Builder icon(Drawable icon) {
this.icon = icon;
this.iconRes = 0;
return this;
}
public Builder icon(@DrawableRes int iconRes) {
this.icon = null;
this.iconRes = iconRes;
return this;
}
public Builder showIcon(boolean showIcon) {
this.showIcon = showIcon;
return this;
}
public Builder setIconGravity(@IconGravity int iconGravity) {
this.iconGravity = iconGravity;
return this;
}
public Builder setOnChangeAction(MaterialAboutItemOnChangeAction onChangeAction) {
this.onChangeAction = onChangeAction;
return this;
}
public Builder checked(boolean isChecked) {
this.checked = isChecked;
return this;
}
public MaterialAboutSwitchItem build() {
return new MaterialAboutSwitchItem(this);
}
}
}

View File

@ -1,400 +0,0 @@
package com.danielstone.materialaboutlibrary.items;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build;
import androidx.annotation.ColorInt;
import androidx.annotation.DrawableRes;
import androidx.annotation.StringRes;
import android.util.TypedValue;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.danielstone.materialaboutlibrary.R;
import com.danielstone.materialaboutlibrary.holders.MaterialAboutItemViewHolder;
import com.danielstone.materialaboutlibrary.util.ViewTypeManager;
import static android.view.View.GONE;
public class MaterialAboutTitleItem extends MaterialAboutItem {
private CharSequence text = null;
private int textRes = 0;
private CharSequence desc = null;
private int descRes = 0;
private int textColor = -1;
private int descColor = -1;
private Drawable icon = null;
private int iconRes = 0;
private MaterialAboutItemOnClickAction onClickAction = null;
private MaterialAboutItemOnClickAction onLongClickAction = null;
private MaterialAboutTitleItem(MaterialAboutTitleItem.Builder builder) {
super();
this.text = builder.text;
this.textRes = builder.textRes;
this.desc = builder.desc;
this.descRes = builder.descRes;
this.textColor = builder.textColor;
this.descColor = builder.descColor;
this.icon = builder.icon;
this.iconRes = builder.iconRes;
this.onClickAction = builder.onClickAction;
this.onLongClickAction = builder.onLongClickAction;
}
public MaterialAboutTitleItem(CharSequence text, CharSequence desc, Drawable icon) {
this.text = text;
this.desc = desc;
this.icon = icon;
}
public MaterialAboutTitleItem(int textRes, int descRes, int iconRes) {
this.textRes = textRes;
this.descRes = descRes;
this.iconRes = iconRes;
}
public static MaterialAboutItemViewHolder getViewHolder(View view) {
return new MaterialAboutTitleItem.MaterialAboutTitleItemViewHolder(view);
}
public static void setupItem(MaterialAboutTitleItemViewHolder holder, MaterialAboutTitleItem item, Context context) {
CharSequence text = item.getText();
int textRes = item.getTextRes();
holder.text.setVisibility(View.VISIBLE);
if (text != null) {
holder.text.setText(text);
} else if (textRes != 0) {
holder.text.setText(textRes);
} else {
holder.text.setVisibility(GONE);
}
CharSequence desc = item.getDesc();
int descRes = item.getDescRes();
holder.desc.setVisibility(View.VISIBLE);
if (desc != null) {
holder.desc.setText(desc);
} else if (descRes != 0) {
holder.desc.setText(descRes);
} else {
holder.desc.setVisibility(GONE);
}
if (item.getTextColor() != -1) {
holder.text.setTextColor(item.getTextColor());
}
if (item.getDescColor() != -1) {
holder.desc.setTextColor(item.getDescColor());
}
Drawable drawable = item.getIcon();
int drawableRes = item.getIconRes();
if (drawable != null) {
holder.icon.setImageDrawable(drawable);
} else if (drawableRes != 0) {
holder.icon.setImageResource(drawableRes);
}
int pL = 0, pT = 0, pR = 0, pB = 0;
if (Build.VERSION.SDK_INT < 21) {
pL = holder.view.getPaddingLeft();
pT = holder.view.getPaddingTop();
pR = holder.view.getPaddingRight();
pB = holder.view.getPaddingBottom();
}
if (item.getOnClickAction() != null || item.getOnLongClickAction() != null) {
TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(R.attr.selectableItemBackground, outValue, true);
holder.view.setBackgroundResource(outValue.resourceId);
} else {
holder.view.setBackgroundResource(0);
}
holder.setOnClickAction(item.getOnClickAction());
holder.setOnLongClickAction(item.getOnLongClickAction());
if (Build.VERSION.SDK_INT < 21) {
holder.view.setPadding(pL, pT, pR, pB);
}
}
@Override
public int getType() {
return ViewTypeManager.ItemType.TITLE_ITEM;
}
@Override
public String getDetailString() {
return "MaterialAboutTitleItem{" +
"text=" + text +
", textRes=" + textRes +
", desc=" + desc +
", descRes=" + descRes +
", textColor=" + textColor +
", descColor=" + descColor +
", icon=" + icon +
", iconRes=" + iconRes +
", onClickAction=" + onClickAction +
", onLongClickAction=" + onLongClickAction +
'}';
}
public MaterialAboutTitleItem(MaterialAboutTitleItem item) {
this.id = item.getId();
this.text = item.getText();
this.textRes = item.getTextRes();
this.desc = item.getDesc();
this.descRes = item.getDescRes();
this.textColor = item.getTextColor();
this.descColor = item.getDescColor();
this.icon = item.getIcon();
this.iconRes = item.getIconRes();
this.onClickAction = item.getOnClickAction();
this.onLongClickAction = item.getOnLongClickAction();
}
@Override
public MaterialAboutTitleItem clone() {
return new MaterialAboutTitleItem(this);
}
public CharSequence getText() {
return text;
}
public MaterialAboutTitleItem setText(CharSequence text) {
this.textRes = 0;
this.text = text;
return this;
}
public int getTextRes() {
return textRes;
}
public MaterialAboutTitleItem setTextRes(int textRes) {
this.text = null;
this.textRes = textRes;
return this;
}
public CharSequence getDesc() {
return desc;
}
public MaterialAboutTitleItem setDesc(CharSequence desc) {
this.descRes = 0;
this.desc = desc;
return this;
}
public int getDescRes() {
return descRes;
}
public MaterialAboutTitleItem setDescRes(int descRes) {
this.desc = null;
this.descRes = textRes;
return this;
}
public int getTextColor() {
return textColor;
}
public MaterialAboutTitleItem setTextColor(int textColor) {
this.textColor = textColor;
return this;
}
public int getDescColor() {
return descColor;
}
public MaterialAboutTitleItem setDescColor(int descColor) {
this.descColor = descColor;
return this;
}
public Drawable getIcon() {
return icon;
}
public MaterialAboutTitleItem setIcon(Drawable icon) {
this.iconRes = 0;
this.icon = icon;
return this;
}
public int getIconRes() {
return iconRes;
}
public MaterialAboutTitleItem setIconRes(int iconRes) {
this.icon = null;
this.iconRes = iconRes;
return this;
}
public MaterialAboutItemOnClickAction getOnClickAction() {
return onClickAction;
}
public MaterialAboutTitleItem setOnClickAction(MaterialAboutItemOnClickAction onClickAction) {
this.onClickAction = onClickAction;
return this;
}
public MaterialAboutItemOnClickAction getOnLongClickAction() {
return onLongClickAction;
}
public MaterialAboutTitleItem setOnLongClickAction(MaterialAboutItemOnClickAction onLongClickAction) {
this.onLongClickAction = onLongClickAction;
return this;
}
public static class MaterialAboutTitleItemViewHolder extends MaterialAboutItemViewHolder implements View.OnClickListener, View.OnLongClickListener {
public final View view;
public final ImageView icon;
public final TextView text;
public final TextView desc;
private MaterialAboutItemOnClickAction onClickAction;
private MaterialAboutItemOnClickAction onLongClickAction;
MaterialAboutTitleItemViewHolder(View view) {
super(view);
this.view = view;
icon = (ImageView) view.findViewById(R.id.mal_item_image);
text = (TextView) view.findViewById(R.id.mal_item_text);
desc = (TextView) view.findViewById(R.id.mal_item_desc);
}
public void setOnClickAction(MaterialAboutItemOnClickAction onClickAction) {
this.onClickAction = onClickAction;
if (onClickAction != null) {
view.setOnClickListener(this);
} else {
view.setClickable(false);
}
}
public void setOnLongClickAction(MaterialAboutItemOnClickAction onLongClickAction) {
this.onLongClickAction = onLongClickAction;
if (onLongClickAction != null) {
view.setOnLongClickListener(this);
} else {
view.setLongClickable(false);
}
}
@Override
public void onClick(View v) {
if (onClickAction != null) {
onClickAction.onClick();
}
}
@Override
public boolean onLongClick(View v) {
if (onLongClickAction != null) {
onLongClickAction.onClick();
return true;
}
return false;
}
}
public static class Builder {
MaterialAboutItemOnClickAction onClickAction = null;
MaterialAboutItemOnClickAction onLongClickAction = null;
private CharSequence text = null;
@StringRes
private int textRes = 0;
private CharSequence desc = null;
@StringRes
private int descRes = 0;
@ColorInt
private int textColor = -1;
@ColorInt
private int descColor = -1;
private Drawable icon = null;
@DrawableRes
private int iconRes = 0;
public MaterialAboutTitleItem.Builder text(CharSequence text) {
this.text = text;
this.textRes = 0;
return this;
}
public MaterialAboutTitleItem.Builder text(@StringRes int text) {
this.textRes = text;
this.text = null;
return this;
}
public MaterialAboutTitleItem.Builder desc(CharSequence desc) {
this.desc = desc;
this.descRes = 0;
return this;
}
public MaterialAboutTitleItem.Builder desc(@StringRes int desc) {
this.descRes = desc;
this.desc = null;
return this;
}
public MaterialAboutTitleItem.Builder textColor(@ColorInt int textColor) {
this.textColor = textColor;
return this;
}
public MaterialAboutTitleItem.Builder descColor(@ColorInt int descColor) {
this.descColor = descColor;
return this;
}
public MaterialAboutTitleItem.Builder icon(Drawable icon) {
this.icon = icon;
this.iconRes = 0;
return this;
}
public MaterialAboutTitleItem.Builder icon(@DrawableRes int iconRes) {
this.icon = null;
this.iconRes = iconRes;
return this;
}
public MaterialAboutTitleItem.Builder setOnClickAction(MaterialAboutItemOnClickAction onClickAction) {
this.onClickAction = onClickAction;
return this;
}
public MaterialAboutTitleItem.Builder setOnLongClickAction(MaterialAboutItemOnClickAction onLongClickAction) {
this.onLongClickAction = onLongClickAction;
return this;
}
public MaterialAboutTitleItem build() {
return new MaterialAboutTitleItem(this);
}
}
}

View File

@ -1,156 +0,0 @@
package com.danielstone.materialaboutlibrary.model;
import androidx.annotation.ColorInt;
import androidx.annotation.StringRes;
import androidx.annotation.StyleRes;
import androidx.recyclerview.widget.RecyclerView;
import com.danielstone.materialaboutlibrary.items.MaterialAboutItem;
import java.util.ArrayList;
import java.util.Collections;
import java.util.UUID;
public class MaterialAboutCard {
private String id = "NO-UUID";
private CharSequence title = null;
private int titleRes = 0;
private int titleColor = 0;
private int cardColor = 0;
private RecyclerView.Adapter customAdapter = null;
private ArrayList<MaterialAboutItem> items = new ArrayList<>();
private MaterialAboutCard(Builder builder) {
this.id = UUID.randomUUID().toString();
this.title = builder.title;
this.titleRes = builder.titleRes;
this.titleColor = builder.titleColor;
this.cardColor = builder.cardColor;
this.items = builder.items;
this.customAdapter = builder.customAdapter;
}
public MaterialAboutCard(CharSequence title, MaterialAboutItem... materialAboutItems) {
this.title = title;
Collections.addAll(items, materialAboutItems);
}
public MaterialAboutCard(int titleRes, MaterialAboutItem... materialAboutItems) {
this.titleRes = titleRes;
Collections.addAll(items, materialAboutItems);
}
public CharSequence getTitle() {
return title;
}
public int getTitleRes() {
return titleRes;
}
public int getTitleColor() {
return titleColor;
}
public int getCardColor() {
return cardColor;
}
public ArrayList<MaterialAboutItem> getItems() {
return items;
}
public static class Builder {
private CharSequence title = null;
@StringRes
private int titleRes = 0;
@ColorInt
private int titleColor = 0;
@ColorInt
private int cardColor = 0;
private ArrayList<MaterialAboutItem> items = new ArrayList<>();
private RecyclerView.Adapter customAdapter = null;
public Builder title(CharSequence title) {
this.title = title;
this.titleRes = 0;
return this;
}
public Builder title(@StringRes int titleRes) {
this.titleRes = titleRes;
this.title = null;
return this;
}
public Builder titleColor(@ColorInt int color) {
this.titleColor = color;
return this;
}
public Builder cardColor(@ColorInt int cardColor) {
this.cardColor = cardColor;
return this;
}
public Builder addItem(MaterialAboutItem item) {
this.items.add(item);
return this;
}
public Builder customAdapter(RecyclerView.Adapter customAdapter) {
this.customAdapter = customAdapter;
return this;
}
public MaterialAboutCard build() {
return new MaterialAboutCard(this);
}
}
public String getId() {
return id;
}
public RecyclerView.Adapter getCustomAdapter() {
return customAdapter;
}
@Override
public String toString() {
String result = "MaterialAboutCard{" +
"id='" + id + '\'' +
", title=" + title +
", titleRes=" + titleRes +
", titleColor=" + titleColor +
", customAdapter=" + customAdapter +
", cardColor=" + cardColor + '}';
return result;
}
public MaterialAboutCard(MaterialAboutCard card) {
this.id = card.getId();
this.title = card.getTitle();
this.titleRes = card.getTitleRes();
this.titleColor = card.getTitleColor();
this.cardColor = card.getCardColor();
this.items = new ArrayList<>();
this.customAdapter = card.getCustomAdapter();
for (MaterialAboutItem item : card.items) {
this.items.add(item.clone());
}
}
public MaterialAboutCard clone() {
return new MaterialAboutCard(this);
}
}

View File

@ -1,45 +0,0 @@
package com.danielstone.materialaboutlibrary.model;
import java.util.ArrayList;
import java.util.Collections;
public class MaterialAboutList {
private ArrayList<MaterialAboutCard> cards = new ArrayList<>();
private MaterialAboutList(Builder builder) {
this.cards = builder.cards;
}
public MaterialAboutList(MaterialAboutCard... materialAboutCards) {
Collections.addAll(cards, materialAboutCards);
}
public MaterialAboutList addCard(MaterialAboutCard card) {
cards.add(card);
return this;
}
public MaterialAboutList clearCards(MaterialAboutCard card) {
cards.clear();
return this;
}
public ArrayList<MaterialAboutCard> getCards() {
return cards;
}
public static class Builder {
private ArrayList<MaterialAboutCard> cards = new ArrayList<>();
public Builder addCard(MaterialAboutCard card) {
this.cards.add(card);
return this;
}
public MaterialAboutList build() {
return new MaterialAboutList(this);
}
}
}

View File

@ -1,108 +0,0 @@
package com.danielstone.materialaboutlibrary.util;
import android.content.Context;
import android.view.View;
import com.danielstone.materialaboutlibrary.holders.MaterialAboutItemViewHolder;
import com.danielstone.materialaboutlibrary.items.MaterialAboutActionItem;
import com.danielstone.materialaboutlibrary.items.MaterialAboutActionSwitchItem;
import com.danielstone.materialaboutlibrary.items.MaterialAboutCheckboxItem;
import com.danielstone.materialaboutlibrary.items.MaterialAboutItem;
import com.danielstone.materialaboutlibrary.items.MaterialAboutProfileItem;
import com.danielstone.materialaboutlibrary.items.MaterialAboutSwitchItem;
import com.danielstone.materialaboutlibrary.items.MaterialAboutTitleItem;
import static com.danielstone.materialaboutlibrary.util.DefaultViewTypeManager.ItemLayout.ACTION_LAYOUT;
import static com.danielstone.materialaboutlibrary.util.DefaultViewTypeManager.ItemLayout.ACTION_SWITCH_LAYOUT;
import static com.danielstone.materialaboutlibrary.util.DefaultViewTypeManager.ItemLayout.CHECKBOX_LAYOUT;
import static com.danielstone.materialaboutlibrary.util.DefaultViewTypeManager.ItemLayout.PROFILE_LAYOUT;
import static com.danielstone.materialaboutlibrary.util.DefaultViewTypeManager.ItemLayout.SWITCH_LAYOUT;
import static com.danielstone.materialaboutlibrary.util.DefaultViewTypeManager.ItemLayout.TITLE_LAYOUT;
import static com.danielstone.materialaboutlibrary.util.DefaultViewTypeManager.ItemType.ACTION_ITEM;
import static com.danielstone.materialaboutlibrary.util.DefaultViewTypeManager.ItemType.ACTION_SWITCH_ITEM;
import static com.danielstone.materialaboutlibrary.util.DefaultViewTypeManager.ItemType.CHECKBOX_ITEM;
import static com.danielstone.materialaboutlibrary.util.DefaultViewTypeManager.ItemType.PROFILE_ITEM;
import static com.danielstone.materialaboutlibrary.util.DefaultViewTypeManager.ItemType.SWITCH_ITEM;
import static com.danielstone.materialaboutlibrary.util.DefaultViewTypeManager.ItemType.TITLE_ITEM;
public class DefaultViewTypeManager extends ViewTypeManager {
public static final class ItemType {
public static final int ACTION_ITEM = ViewTypeManager.ItemType.ACTION_ITEM;
public static final int TITLE_ITEM = ViewTypeManager.ItemType.TITLE_ITEM;
public static final int SWITCH_ITEM = ViewTypeManager.ItemType.SWITCH_ITEM;
public static final int ACTION_SWITCH_ITEM = ViewTypeManager.ItemType.ACTION_SWITCH_ITEM;
public static final int CHECKBOX_ITEM = ViewTypeManager.ItemType.CHECKBOX_ITEM;
public static final int PROFILE_ITEM = ViewTypeManager.ItemType.PROFILE_ITEM;
}
public static final class ItemLayout {
public static final int ACTION_LAYOUT = ViewTypeManager.ItemLayout.ACTION_LAYOUT;
public static final int TITLE_LAYOUT = ViewTypeManager.ItemLayout.TITLE_LAYOUT;
public static final int SWITCH_LAYOUT = ViewTypeManager.ItemLayout.SWITCH_LAYOUT;
public static final int ACTION_SWITCH_LAYOUT = ViewTypeManager.ItemLayout.ACTION_SWITCH_LAYOUT;
public static final int CHECKBOX_LAYOUT = ViewTypeManager.ItemLayout.CHECKBOX_LAYOUT;
public static final int PROFILE_LAYOUT = ViewTypeManager.ItemLayout.PROFILE_LAYOUT;
}
public int getLayout(int itemType) {
switch (itemType) {
case ACTION_ITEM:
return ACTION_LAYOUT;
case TITLE_ITEM:
return TITLE_LAYOUT;
case SWITCH_ITEM:
return SWITCH_LAYOUT;
case ACTION_SWITCH_ITEM:
return ACTION_SWITCH_LAYOUT;
case CHECKBOX_ITEM:
return CHECKBOX_LAYOUT;
case PROFILE_ITEM:
return PROFILE_LAYOUT;
default:
return -1;
}
}
public MaterialAboutItemViewHolder getViewHolder(int itemType, View view) {
switch (itemType) {
case ACTION_ITEM:
return MaterialAboutActionItem.getViewHolder(view);
case TITLE_ITEM:
return MaterialAboutTitleItem.getViewHolder(view);
case SWITCH_ITEM:
return MaterialAboutSwitchItem.getViewHolder(view);
case ACTION_SWITCH_ITEM:
return MaterialAboutActionSwitchItem.getViewHolder(view);
case CHECKBOX_ITEM:
return MaterialAboutCheckboxItem.getViewHolder(view);
case PROFILE_ITEM:
return MaterialAboutProfileItem.getViewHolder(view);
default:
return null;
}
}
public void setupItem(int itemType, MaterialAboutItemViewHolder holder, MaterialAboutItem item, Context context) {
switch (itemType) {
case ACTION_ITEM:
MaterialAboutActionItem.setupItem((MaterialAboutActionItem.MaterialAboutActionItemViewHolder) holder, (MaterialAboutActionItem) item, context);
break;
case TITLE_ITEM:
MaterialAboutTitleItem.setupItem((MaterialAboutTitleItem.MaterialAboutTitleItemViewHolder) holder, (MaterialAboutTitleItem) item, context);
break;
case SWITCH_ITEM:
MaterialAboutSwitchItem.setupItem((MaterialAboutSwitchItem.MaterialAboutSwitchItemViewHolder) holder, (MaterialAboutSwitchItem) item, context);
break;
case ACTION_SWITCH_ITEM:
MaterialAboutActionSwitchItem.setupItem((MaterialAboutActionSwitchItem.MaterialAboutActionSwitchItemViewHolder) holder, (MaterialAboutActionSwitchItem) item, context);
break;
case CHECKBOX_ITEM:
MaterialAboutCheckboxItem.setupItem((MaterialAboutCheckboxItem.MaterialAboutCheckboxItemViewHolder) holder, (MaterialAboutCheckboxItem) item, context);
break;
case PROFILE_ITEM:
MaterialAboutProfileItem.setupItem((MaterialAboutProfileItem.MaterialAboutProfileItemViewHolder) holder, (MaterialAboutProfileItem) item, context);
break;
}
}
}

View File

@ -1,22 +0,0 @@
package com.danielstone.materialaboutlibrary.util;
import com.danielstone.materialaboutlibrary.R;
public enum OpenSourceLicense {
APACHE_2, MIT, GNU_GPL_3, BSD;
public int getResourceId() {
switch (this) {
case APACHE_2:
return R.string.license_apache2;
case MIT:
return R.string.license_mit;
case GNU_GPL_3:
return R.string.license_gpl;
case BSD:
return R.string.license_bsd;
default:
return -1;
}
}
}

View File

@ -1,35 +0,0 @@
package com.danielstone.materialaboutlibrary.util;
import android.content.Context;
import android.view.View;
import com.danielstone.materialaboutlibrary.R;
import com.danielstone.materialaboutlibrary.holders.MaterialAboutItemViewHolder;
import com.danielstone.materialaboutlibrary.items.MaterialAboutItem;
public abstract class ViewTypeManager {
public static final class ItemType {
public static final int ACTION_ITEM = 0;
public static final int TITLE_ITEM = 1;
public static final int SWITCH_ITEM = 2;
public static final int ACTION_SWITCH_ITEM = 3;
public static final int CHECKBOX_ITEM = 4;
public static final int PROFILE_ITEM = 5;
}
public static final class ItemLayout {
public static final int ACTION_LAYOUT = R.layout.mal_material_about_action_item;
public static final int TITLE_LAYOUT = R.layout.mal_material_about_title_item;
public static final int SWITCH_LAYOUT = R.layout.mal_material_about_switch_item;
public static final int ACTION_SWITCH_LAYOUT = R.layout.mal_material_about_action_switch_item;
public static final int CHECKBOX_LAYOUT = R.layout.mal_material_about_checkbox_item;
public static final int PROFILE_LAYOUT = R.layout.mal_material_about_profile_item;
}
public abstract int getLayout(int itemType);
public abstract MaterialAboutItemViewHolder getViewHolder(int itemType, View view);
public abstract void setupItem(int itemType, MaterialAboutItemViewHolder holder, MaterialAboutItem item, Context context);
}

View File

@ -1,58 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/mal_baseline_half"
android:paddingBottom="@dimen/mal_baseline_half"
android:paddingStart="8dp"
android:orientation="horizontal"
android:paddingLeft="8dp">
<ImageView
android:id="@+id/mal_item_image"
android:layout_width="@dimen/mal_action_item_image_width"
android:layout_height="@dimen/mal_action_action_item_image_height"
android:layout_gravity="center"
android:layout_marginEnd="@dimen/mal_baseline_half"
android:layout_marginLeft="@dimen/mal_baseline"
android:layout_marginRight="@dimen/mal_baseline_half"
android:layout_marginStart="@dimen/mal_baseline"
android:adjustViewBounds="false"
android:contentDescription="@null"
android:cropToPadding="false"
android:scaleType="centerInside" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:minHeight="@dimen/mal_action_action_item_image_height"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:layout_marginEnd="@dimen/mal_baseline"
android:layout_marginLeft="@dimen/mal_baseline"
android:layout_marginRight="@dimen/mal_baseline"
android:layout_marginStart="@dimen/mal_baseline"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/mal_item_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
android:textColor="?mal_color_primary"
tools:text="Version" />
<TextView
android:id="@+id/mal_action_item_subtext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textColor="?mal_color_secondary"
android:visibility="gone"
tools:visibility="visible"
tools:text="Current Version Of App" />
</LinearLayout>
</LinearLayout>

View File

@ -1,83 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/mal_action_root"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal"
android:paddingStart="8dp"
android:paddingLeft="8dp"
android:paddingTop="@dimen/mal_baseline_half"
android:paddingRight="8dp"
android:paddingBottom="@dimen/mal_baseline_half">
<ImageView
android:id="@+id/mal_item_image"
android:layout_width="@dimen/mal_action_item_image_width"
android:layout_height="@dimen/mal_action_action_item_image_height"
android:layout_gravity="center"
android:layout_marginStart="@dimen/mal_baseline"
android:layout_marginLeft="@dimen/mal_baseline"
android:layout_marginEnd="@dimen/mal_baseline_half"
android:layout_marginRight="@dimen/mal_baseline_half"
android:adjustViewBounds="false"
android:contentDescription="@null"
android:cropToPadding="false"
android:scaleType="centerInside" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="@dimen/mal_baseline"
android:layout_marginLeft="@dimen/mal_baseline"
android:layout_marginEnd="@dimen/mal_baseline"
android:layout_marginRight="@dimen/mal_baseline_half"
android:gravity="center_vertical"
android:minHeight="@dimen/mal_action_action_item_image_height"
android:orientation="vertical">
<TextView
android:id="@+id/mal_item_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
android:textColor="?mal_color_primary"
tools:text="Pokaż menu boczne" />
<TextView
android:id="@+id/mal_action_item_subtext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textColor="?mal_color_secondary"
android:visibility="gone"
tools:text="Wyświetlaj menu po lewej stronie"
tools:visibility="visible" />
</LinearLayout>
</LinearLayout>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/mal_baseline_half"
android:layout_marginBottom="@dimen/mal_baseline_half"
android:background="?mal_divider_color" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/mal_switch"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:paddingStart="?android:attr/listPreferredItemPaddingEnd"
android:paddingLeft="16dp"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingRight="16dp" />
</LinearLayout>

View File

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MaterialAboutActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.Toolbar
android:id="@+id/mal_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:theme="?attr/mal_toolbarTheme"
app:popupTheme="?attr/mal_toolbarPopupTheme"
/>
</com.google.android.material.appbar.AppBarLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/mal_recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingBottom="@dimen/mal_baseline_half"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingStart="8dp"
android:paddingLeft="8dp"
android:paddingTop="@dimen/mal_baseline_half"
android:paddingBottom="@dimen/mal_baseline_half">
<ImageView
android:id="@+id/mal_item_image"
android:layout_width="@dimen/mal_action_item_image_width"
android:layout_height="@dimen/mal_action_action_item_image_height"
android:layout_gravity="center"
android:layout_marginStart="@dimen/mal_baseline"
android:layout_marginLeft="@dimen/mal_baseline"
android:layout_marginEnd="@dimen/mal_baseline_half"
android:layout_marginRight="@dimen/mal_baseline_half"
android:adjustViewBounds="false"
android:contentDescription="@null"
android:cropToPadding="false"
android:scaleType="centerInside" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="@dimen/mal_baseline"
android:layout_marginLeft="@dimen/mal_baseline"
android:layout_marginEnd="@dimen/mal_baseline"
android:layout_marginRight="@dimen/mal_baseline"
android:layout_weight="1"
android:gravity="center_vertical"
android:minHeight="@dimen/mal_action_action_item_image_height"
android:orientation="vertical">
<TextView
android:id="@+id/mal_item_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
android:textColor="?mal_color_primary"
tools:text="Version" />
<TextView
android:id="@+id/mal_action_item_subtext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textColor="?mal_color_secondary"
android:visibility="gone"
tools:text="Current Version Of App"
tools:visibility="visible" />
</LinearLayout>
<CheckBox
android:id="@+id/mal_checkbox"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingRight="16dp" />
</LinearLayout>

View File

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/mal_recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingBottom="@dimen/mal_baseline_half"/>
</FrameLayout>

View File

@ -1,54 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/mal_list_card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/mal_baseline_half"
android:layout_marginLeft="@dimen/mal_baseline_half"
android:layout_marginTop="@dimen/mal_baseline_half"
android:layout_marginEnd="@dimen/mal_baseline_half"
android:layout_marginRight="@dimen/mal_baseline_half"
android:paddingStart="@dimen/mal_baseline_half"
android:paddingLeft="@dimen/mal_baseline_half"
android:paddingTop="@dimen/mal_baseline"
android:paddingEnd="@dimen/mal_baseline_half"
android:paddingRight="@dimen/mal_baseline_half"
android:paddingBottom="@dimen/mal_baseline"
app:cardBackgroundColor="?mal_card_background"
app:cardCornerRadius="@dimen/mal_card_radius"
app:cardElevation="@dimen/mal_card_elevation"
app:cardPreventCornerOverlap="false"
app:cardUseCompatPadding="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/mal_list_card_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/mal_baseline"
android:layout_marginLeft="@dimen/mal_baseline"
android:layout_marginTop="@dimen/mal_baseline"
android:layout_marginEnd="@dimen/mal_baseline"
android:layout_marginRight="@dimen/mal_baseline"
android:layout_marginBottom="@dimen/mal_baseline_half"
android:textAppearance="@style/TextAppearance.AppCompat.Body2"
android:textColor="?mal_color_primary"
tools:text="Author" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/mal_card_recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipToPadding="false"
android:paddingTop="@dimen/mal_baseline_half"
android:paddingBottom="@dimen/mal_baseline_half" />
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@ -1,66 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="@dimen/mal_baseline_half"
android:paddingRight="@dimen/mal_baseline_half">
<androidx.cardview.widget.CardView
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="@dimen/mal_baseline"
android:layout_marginTop="@dimen/mal_baseline"
android:layout_marginRight="@dimen/mal_baseline"
android:layout_marginBottom="@dimen/mal_baseline"
android:innerRadius="0dp"
android:padding="0dp"
app:cardCornerRadius="40dp"
app:cardElevation="4dp">
<ImageView
android:id="@+id/mal_item_image"
android:layout_width="80dp"
android:layout_height="80dp"
android:adjustViewBounds="false"
android:contentDescription="@null"
android:cropToPadding="false"
android:scaleType="centerCrop"
app:srcCompat="@android:drawable/sym_def_app_icon"
tools:srcCompat="@tools:sample/backgrounds/scenic" />
</androidx.cardview.widget.CardView>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="@dimen/mal_baseline"
android:layout_marginBottom="@dimen/mal_baseline"
android:layout_marginEnd="@dimen/mal_baseline"
android:layout_weight="1"
android:orientation="vertical"
android:layout_marginRight="@dimen/mal_baseline">
<TextView
android:id="@+id/mal_item_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
android:textColor="?mal_color_primary"
android:textSize="24sp"
tools:text="Władca Androida" />
<TextView
android:id="@+id/mal_item_desc"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textColor="?mal_color_secondary"
android:textSize="14sp"
tools:text="kubasz" />
</LinearLayout>
</LinearLayout>

View File

@ -1,67 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingStart="8dp"
android:paddingLeft="8dp"
android:paddingTop="@dimen/mal_baseline_half"
android:paddingBottom="@dimen/mal_baseline_half">
<ImageView
android:id="@+id/mal_item_image"
android:layout_width="@dimen/mal_action_item_image_width"
android:layout_height="@dimen/mal_action_action_item_image_height"
android:layout_gravity="center"
android:layout_marginStart="@dimen/mal_baseline"
android:layout_marginLeft="@dimen/mal_baseline"
android:layout_marginEnd="@dimen/mal_baseline_half"
android:layout_marginRight="@dimen/mal_baseline_half"
android:adjustViewBounds="false"
android:contentDescription="@null"
android:cropToPadding="false"
android:scaleType="centerInside" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="@dimen/mal_baseline"
android:layout_marginLeft="@dimen/mal_baseline"
android:layout_marginEnd="@dimen/mal_baseline"
android:layout_marginRight="@dimen/mal_baseline"
android:layout_weight="1"
android:gravity="center_vertical"
android:minHeight="@dimen/mal_action_action_item_image_height"
android:orientation="vertical">
<TextView
android:id="@+id/mal_item_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Subhead"
android:textColor="?mal_color_primary"
tools:text="Version" />
<TextView
android:id="@+id/mal_action_item_subtext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
android:textColor="?mal_color_secondary"
android:visibility="gone"
tools:text="Current Version Of App"
tools:visibility="visible" />
</LinearLayout>
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/mal_switch"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:paddingStart="?android:attr/listPreferredItemPaddingEnd"
android:paddingLeft="16dp"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingRight="16dp" />
</LinearLayout>

View File

@ -1,60 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="@dimen/mal_baseline_half"
android:paddingEnd="@dimen/mal_baseline"
android:paddingLeft="@dimen/mal_baseline_half"
android:paddingRight="@dimen/mal_baseline"
android:paddingStart="@dimen/mal_baseline_half"
android:paddingTop="@dimen/mal_baseline_half">
<ImageView
android:id="@+id/mal_item_image"
android:layout_width="@dimen/mal_title_item_image_size"
android:layout_height="@dimen/mal_title_item_image_size"
android:layout_gravity="center"
android:layout_marginEnd="@dimen/mal_baseline_half"
android:layout_marginLeft="@dimen/mal_baseline_half"
android:layout_marginRight="@dimen/mal_baseline_half"
android:layout_marginStart="@dimen/mal_baseline_half"
android:adjustViewBounds="false"
android:contentDescription="@null"
android:cropToPadding="false"
android:scaleType="fitCenter"
app:srcCompat="@android:drawable/sym_def_app_icon" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/mal_item_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/mal_baseline_half"
android:layout_marginStart="@dimen/mal_baseline_half"
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
android:textColor="?mal_color_primary"
tools:text="App Name" />
<TextView
android:id="@+id/mal_item_desc"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/mal_baseline_half"
android:layout_marginStart="@dimen/mal_baseline_half"
android:layout_marginTop="-4dp"
android:textAppearance="@style/TextAppearance.AppCompat.Body1"
android:textColor="?mal_color_secondary"
tools:text="Copyright Me" />
</LinearLayout>
</LinearLayout>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="mal_toolbarTheme" format="reference"/>
<attr name="mal_toolbarPopupTheme" format="reference"/>
<attr name="mal_color_primary" format="reference|color" />
<attr name="mal_color_secondary" format="reference|color" />
<attr name="mal_card_background" format="reference|color" />
<attr name="mal_divider_color" format="reference|color" />
</resources>

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="mal_text_primary">#de000000</color>
<color name="mal_text_secondary">#8a000000</color>
<color name="mal_divider_color_light">#ff9b9b9b</color>
</resources>

View File

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="mal_baseline">16dp</dimen>
<dimen name="mal_baseline_half">8dp</dimen>
<dimen name="mal_action_item_image_width">24dp</dimen>
<dimen name="mal_action_action_item_image_height">32dp</dimen>
<dimen name="mal_title_item_image_size">40dp</dimen>
<dimen name="mal_card_radius">4dp</dimen>
<dimen name="mal_card_elevation">4dp</dimen>
</resources>

View File

@ -1,94 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="mal_title_about">About</string>
<string name="mal_close">Close</string>
<string name="mal_send_email">Send email</string>
<string name="mal_activity_exception">No apps to handle action</string>
<string name="license_apache2" translatable="false">
"\nCopyright %1$s %2$s\n"
"\nLicensed under the Apache License, Version 2.0 (the \"License\");"
"you may not use this file except in compliance with the License."
"You may obtain a copy of the License at\n"
"\nhttp://www.apache.org/licenses/LICENSE-2.0\n"
"\nUnless required by applicable law or agreed to in writing, software"
"distributed under the License is distributed on an \"AS IS\" BASIS,"
"WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied."
"See the License for the specific language governing permissions and"
"limitations under the License."
</string>
<string name="license_mit" translatable="false">
"\nMIT License\n"
"\nCopyright © %1$s %2$s\n"
"\nPermission is hereby granted, free of charge, to any person obtaining a copy"
"of this software and associated documentation files (the "Software"), to deal"
"in the Software without restriction, including without limitation the rights"
"to use, copy, modify, merge, publish, distribute, sublicense, and/or sell"
"copies of the Software, and to permit persons to whom the Software is"
"furnished to do so, subject to the following conditions:\n"
"\nThe above copyright notice and this permission notice shall be included in all"
"copies or substantial portions of the Software.\n"
"\nTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR"
"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,"
"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE"
"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER"
"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,"
"OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE"
"SOFTWARE."
</string>
<string name="license_gpl" translatable="false">
"\nCopyright © %1$s %2$s\n"
"\nThis program is free software: you can redistribute it and/or modify"
"it under the terms of the GNU General Public License as published by"
"the Free Software Foundation, either version 3 of the License, or"
"(at your option) any later version.\n"
"\nThis program 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 General Public License for more details.\n"
"\nYou should have received a copy of the GNU General Public License"
"along with this program. If not, see http://www.gnu.org/licenses.\n"
</string>
<string name="license_bsd" translatable="false">
"\nCopyright © %1$s %2$s\n"
"\nRedistribution and use in source and binary forms, with or without"
"modification, are permitted provided that the following conditions are met:\n"
"\n1. Redistributions of source code must retain the above copyright notice, this"
" list of conditions and the following disclaimer.\n"
"2. Redistributions in binary form must reproduce the above copyright notice,"
" this list of conditions and the following disclaimer in the documentation"
" and/or other materials provided with the distribution.\n"
"\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND"
"ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED"
"WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE"
"DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR"
"ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES"
"(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;"
"LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND"
"ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT"
"(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS"
"SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
"\nThe views and conclusions contained in the software and documentation are those"
"of the authors and should not be interpreted as representing official policies,"
"either expressed or implied, of the FreeBSD Project.\n"
</string>
</resources>

View File

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Mal.Light" parent="Theme.AppCompat.Light.NoActionBar">
<item name="mal_toolbarTheme">@style/Theme.Mal.Toolbar.Light</item>
<item name="mal_toolbarPopupTheme">@style/Theme.Mal.Toolbar.Light</item>
<item name="mal_color_primary">@color/mal_text_primary</item>
<item name="mal_color_secondary">@color/mal_text_secondary</item>
<item name="mal_card_background">@color/cardview_light_background</item>
<item name="mal_divider_color">@color/mal_divider_color_light</item>
</style>
<style name="Theme.Mal.Toolbar.Light" parent="ThemeOverlay.AppCompat.Light" />
<style name="Theme.Mal.Toolbar.Dark" parent="ThemeOverlay.AppCompat.Dark" />
</resources>

View File

@ -3,7 +3,7 @@ include ':wear'
include ':codegen' include ':codegen'
include ':annotation' include ':annotation'
rootProject.name='Szkolny.eu' rootProject.name='Szkolny.eu'
include ':app', ':agendacalendarview', ':mhttp', ':material-about-library', ':cafebar', ':szkolny-font', ':nachos' include ':app', ':agendacalendarview', ':mhttp', ':cafebar', ':szkolny-font', ':nachos'
/* /*
include ':Navigation' include ':Navigation'
project(':Navigation').projectDir = new File(settingsDir, '../Navigation/navlib')*/ project(':Navigation').projectDir = new File(settingsDir, '../Navigation/navlib')*/