mirror of
https://github.com/szkolny-eu/szkolny-android.git
synced 2025-01-31 05:48:19 +01:00
[Gradle] Extract material-about-library dependency.
This commit is contained in:
parent
147f4c39e5
commit
50e7bf14d4
@ -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")
|
||||||
|
@ -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();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* _____ _ ____ _ _
|
/* _____ _ ____ _ _
|
||||||
/ ____| | | | _ \ | | | |
|
/ ____| | | | _ \ | | | |
|
||||||
| | _ _ ___| |_ ___ _ __ ___ | |_) | __ _ ___| | ____ _ _ __ ___ _ _ _ __ __| |___
|
| | _ _ ___| |_ ___ _ __ ___ | |_) | __ _ ___| | ____ _ _ __ ___ _ _ _ __ __| |___
|
||||||
|
@ -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>
|
||||||
|
@ -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}"
|
|
||||||
}
|
|
@ -1,4 +0,0 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
package="com.danielstone.materialaboutlibrary">
|
|
||||||
|
|
||||||
</manifest>
|
|
@ -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();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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();
|
|
||||||
|
|
||||||
}
|
|
@ -1,5 +0,0 @@
|
|||||||
package com.danielstone.materialaboutlibrary.items;
|
|
||||||
|
|
||||||
public interface MaterialAboutItemOnChangeAction {
|
|
||||||
boolean onChange(boolean isChecked, int tag);
|
|
||||||
}
|
|
@ -1,5 +0,0 @@
|
|||||||
package com.danielstone.materialaboutlibrary.items;
|
|
||||||
|
|
||||||
public interface MaterialAboutItemOnClickAction {
|
|
||||||
void onClick();
|
|
||||||
}
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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);
|
|
||||||
}
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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')*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user