status dialog layout fix, moved "local timeline" option to settings activity, bug fix, translation update

This commit is contained in:
nuclearfog 2023-03-12 17:57:49 +01:00
parent a4c9af728f
commit aca8dd5428
No known key found for this signature in database
GPG Key ID: 03488A185C476379
12 changed files with 117 additions and 51 deletions

View File

@ -38,6 +38,9 @@ public enum Configuration {
private final boolean postLocationSupported;
private final boolean userlistVisibility;
private final boolean notificationDismissSupported;
private final boolean statusSpoilerSupported;
private final boolean statusVisibilitySupported;
private final boolean directMessageSupported;
private final int maxImages;
private final int maxGifs;
private final int maxVideos;
@ -58,6 +61,9 @@ public enum Configuration {
postLocationSupported = true;
userlistVisibility = true;
notificationDismissSupported = false;
statusSpoilerSupported = false;
statusVisibilitySupported = false;
directMessageSupported = true;
maxImages = 4;
maxGifs = 1;
maxVideos = 1;
@ -73,6 +79,9 @@ public enum Configuration {
postLocationSupported = false;
userlistVisibility = false;
notificationDismissSupported = true;
statusSpoilerSupported = true;
statusVisibilitySupported = true;
directMessageSupported = false;
maxImages = 4;
maxGifs = 1;
maxVideos = 1;
@ -139,10 +148,31 @@ public enum Configuration {
/**
* @return true if notification dismiss is supported
*/
public boolean NotificationDismissEnabled() {
public boolean notificationDismissEnabled() {
return notificationDismissSupported;
}
/**
* @return true if login type supports warining for status spoiler
*/
public boolean statusSpoilerSupported() {
return statusSpoilerSupported;
}
/**
* @return true if login type supports status visibility states
*/
public boolean statusVisibilitySupported() {
return statusVisibilitySupported;
}
/**
* @return true if directmessaging is supported
*/
public boolean directmessageSupported() {
return directMessageSupported;
}
/**
* @return image limit for posts
*/

View File

@ -35,7 +35,6 @@ import org.nuclearfog.twidda.backend.async.LinkLoader;
import org.nuclearfog.twidda.backend.async.LinkLoader.LinkResult;
import org.nuclearfog.twidda.backend.utils.AppStyles;
import org.nuclearfog.twidda.backend.utils.ErrorHandler;
import org.nuclearfog.twidda.config.Configuration;
import org.nuclearfog.twidda.config.GlobalSettings;
import org.nuclearfog.twidda.ui.adapter.FragmentAdapter;
import org.nuclearfog.twidda.ui.dialogs.ProgressDialog;
@ -166,9 +165,8 @@ public class MainActivity extends AppCompatActivity implements ActivityResultCal
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem localTl = menu.findItem(R.id.menu_local_timeline);
localTl.setVisible(settings.getLogin().getConfiguration() == Configuration.MASTODON);
localTl.setChecked(settings.useLocalTimeline());
MenuItem message = menu.findItem(R.id.menu_message);
message.setVisible(settings.getLogin().getConfiguration().directmessageSupported());
return super.onPrepareOptionsMenu(menu);
}
@ -206,13 +204,6 @@ public class MainActivity extends AppCompatActivity implements ActivityResultCal
Intent accountManager = new Intent(this, AccountActivity.class);
activityResultLauncher.launch(accountManager);
}
// enable disable Mastodon local timeline
else if (item.getItemId() == R.id.menu_local_timeline) {
boolean toggle = !settings.useLocalTimeline();
settings.setLocalTimeline(toggle);
adapter.notifySettingsChanged();
item.setChecked(toggle);
}
return super.onOptionsItemSelected(item);
}

View File

@ -136,7 +136,8 @@ public class SettingsActivity extends AppCompatActivity implements OnClickListen
SwitchButton toggleImg = findViewById(R.id.toggleImg);
SwitchButton toolbarOverlap = findViewById(R.id.settings_toolbar_ov);
SwitchButton enableLike = findViewById(R.id.enable_like);
SwitchButton enableTwitterAlt = findViewById(R.id.settings_enable_twitter_alt);
SwitchButton enableNitter = findViewById(R.id.settings_enable_twitter_alt);
SwitchButton enableLocalTl = findViewById(R.id.settings_local_timeline);
View EnableTwitterAltDescr = findViewById(R.id.settings_enable_twitter_alt_descr);
SwitchButton enableStatusIcons = findViewById(R.id.enable_status_indicators);
SeekBar listSizeSelector = findViewById(R.id.settings_list_seek);
@ -192,7 +193,8 @@ public class SettingsActivity extends AppCompatActivity implements OnClickListen
databaseAsync = new DatabaseAction(this);
if (configuration != Configuration.TWITTER1 && configuration != Configuration.TWITTER2) {
enableTwitterAlt.setVisibility(View.GONE);
enableLocalTl.setVisibility(View.VISIBLE);
enableNitter.setVisibility(View.GONE);
EnableTwitterAltDescr.setVisibility(View.GONE);
trend_card.setVisibility(View.GONE);
}
@ -218,7 +220,8 @@ public class SettingsActivity extends AppCompatActivity implements OnClickListen
toggleImg.setCheckedImmediately(settings.imagesEnabled());
toolbarOverlap.setCheckedImmediately(settings.toolbarOverlapEnabled());
enableLike.setCheckedImmediately(settings.likeEnabled());
enableTwitterAlt.setCheckedImmediately(settings.twitterAltSet());
enableNitter.setCheckedImmediately(settings.twitterAltSet());
enableLocalTl.setCheckedImmediately(settings.useLocalTimeline());
enableStatusIcons.setCheckedImmediately(settings.statusIndicatorsEnabled());
enableProxy.setCheckedImmediately(settings.isProxyEnabled());
enableAuth.setCheckedImmediately(settings.isProxyAuthSet());
@ -236,7 +239,8 @@ public class SettingsActivity extends AppCompatActivity implements OnClickListen
delButton.setOnClickListener(this);
toggleImg.setOnCheckedChangeListener(this);
enableLike.setOnCheckedChangeListener(this);
enableTwitterAlt.setOnCheckedChangeListener(this);
enableNitter.setOnCheckedChangeListener(this);
enableLocalTl.setOnCheckedChangeListener(this);
enableStatusIcons.setOnCheckedChangeListener(this);
enableProxy.setOnCheckedChangeListener(this);
enableAuth.setOnCheckedChangeListener(this);
@ -506,6 +510,10 @@ public class SettingsActivity extends AppCompatActivity implements OnClickListen
else if (c.getId() == R.id.enable_status_indicators) {
settings.enableStatusIndicators(checked);
}
// enable/disable local timeline (Mastodon)
else if (c.getId() == R.id.settings_local_timeline) {
settings.setLocalTimeline(checked);
}
// enable proxy settings
else if (c.getId() == R.id.settings_enable_proxy) {
if (checked) {

View File

@ -61,6 +61,7 @@ public class StatusEditor extends MediaActivity implements OnClickListener, OnPr
private View mediaBtn;
private View locationBtn;
private View pollBtn;
private View locationPending;
private StatusUpdater uploaderAsync;
@ -89,10 +90,10 @@ public class StatusEditor extends MediaActivity implements OnClickListener, OnPr
ImageView background = findViewById(R.id.popup_status_background);
View statusButton = findViewById(R.id.popup_status_send);
View closeButton = findViewById(R.id.popup_status_close);
View addPoll = findViewById(R.id.popup_status_add_poll);
View preference = findViewById(R.id.popup_status_pref);
RecyclerView iconList = findViewById(R.id.popup_status_media_icons);
EditText statusText = findViewById(R.id.popup_status_input);
pollBtn = findViewById(R.id.popup_status_add_poll);
locationBtn = findViewById(R.id.popup_status_add_location);
mediaBtn = findViewById(R.id.popup_status_add_media);
locationPending = findViewById(R.id.popup_status_location_loading);
@ -119,16 +120,16 @@ public class StatusEditor extends MediaActivity implements OnClickListener, OnPr
iconList.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true));
iconList.setAdapter(adapter);
statusText.addTextChangedListener(this);
closeButton.setOnClickListener(this);
preference.setOnClickListener(this);
addPoll.setOnClickListener(this);
statusButton.setOnClickListener(this);
pollBtn.setOnClickListener(this);
mediaBtn.setOnClickListener(this);
locationBtn.setOnClickListener(this);
confirmDialog.setConfirmListener(this);
loadingCircle.addOnProgressStopListener(this);
adapter.addOnMediaClickListener(this);
statusText.addTextChangedListener(this);
}
@ -258,9 +259,14 @@ public class StatusEditor extends MediaActivity implements OnClickListener, OnPr
Toast.makeText(getApplicationContext(), R.string.error_adding_media, Toast.LENGTH_SHORT).show();
break;
}
// hide media button if limit is reached
if (statusUpdate.mediaLimitReached()) {
mediaBtn.setVisibility(View.GONE);
}
// hide poll button
if (mediaType != StatusUpdate.MEDIA_ERROR && pollBtn.getVisibility() != View.GONE) {
pollBtn.setVisibility(View.GONE);
}
}

View File

@ -239,7 +239,7 @@ public class StatusHolder extends ViewHolder implements OnClickListener {
label.setVisibility(View.VISIBLE);
label.setText(text);
label.setCompoundDrawablesWithIntrinsicBounds(iconRes, 0, 0, 0);
if (settings.getLogin().getConfiguration().NotificationDismissEnabled()) {
if (settings.getLogin().getConfiguration().notificationDismissEnabled()) {
dismissButton.setVisibility(View.VISIBLE);
}
AppStyles.setDrawableColor(label, settings.getIconColor());

View File

@ -152,7 +152,7 @@ public class UserHolder extends ViewHolder implements OnClickListener {
iconRes = R.drawable.follower_request;
break;
}
if (settings.getLogin().getConfiguration().NotificationDismissEnabled()) {
if (settings.getLogin().getConfiguration().notificationDismissEnabled()) {
notificationDismiss.setVisibility(VISIBLE);
}
label.setVisibility(VISIBLE);

View File

@ -16,6 +16,7 @@ import com.kyleduo.switchbutton.SwitchButton;
import org.nuclearfog.twidda.R;
import org.nuclearfog.twidda.backend.helper.StatusUpdate;
import org.nuclearfog.twidda.backend.utils.AppStyles;
import org.nuclearfog.twidda.config.GlobalSettings;
/**
* status editor preference dialog used to set additional status information
@ -37,11 +38,19 @@ public class StatusPreferenceDialog extends Dialog implements OnCheckedChangeLis
SwitchButton sensitiveCheck = findViewById(R.id.dialog_status_sensitive);
SwitchButton spoilerCheck = findViewById(R.id.dialog_status_spoiler);
Spinner visibilitySelector = findViewById(R.id.dialog_status_visibility);
View statusVisibility = findViewById(R.id.dialog_status_visibility_container);
View statusSpoiler = findViewById(R.id.dialog_status_spoiler_container);
GlobalSettings settings = GlobalSettings.getInstance(context);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(context, R.array.visibility, android.R.layout.simple_spinner_dropdown_item);
visibilitySelector.setAdapter(adapter);
AppStyles.setTheme(rootView);
if (!settings.getLogin().getConfiguration().statusVisibilitySupported()) {
statusVisibility.setVisibility(View.GONE);
}
if (!settings.getLogin().getConfiguration().statusSpoilerSupported()) {
statusSpoiler.setVisibility(View.GONE);
}
sensitiveCheck.setOnCheckedChangeListener(this);
spoilerCheck.setOnCheckedChangeListener(this);
visibilitySelector.setOnItemSelectedListener(this);

View File

@ -18,47 +18,46 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical|end"
android:layout_marginBottom="@dimen/dialog_status_layout_margins">
<com.kyleduo.switchbutton.SwitchButton
android:id="@+id/dialog_status_sensitive"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dialog_status_layout_margins"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dialog_status_sensitive"
android:layout_marginEnd="@dimen/dialog_status_layout_margins"
android:lines="1"/>
<com.kyleduo.switchbutton.SwitchButton
android:id="@+id/dialog_status_sensitive"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:id="@+id/dialog_status_spoiler_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="end"
android:layout_marginBottom="@dimen/dialog_status_layout_margins">
<com.kyleduo.switchbutton.SwitchButton
android:id="@+id/dialog_status_spoiler"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/dialog_status_layout_margins"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dialog_status_spoiler"
android:layout_marginEnd="@dimen/dialog_status_layout_margins"
android:lines="1"/>
<com.kyleduo.switchbutton.SwitchButton
android:id="@+id/dialog_status_spoiler"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:id="@+id/dialog_status_visibility_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="end">
android:orientation="horizontal">
<TextView
android:layout_width="0dp"

View File

@ -387,7 +387,7 @@
android:layout_marginEnd="@dimen/settings_switch_margin"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toggleImg"
app:layout_constraintBottom_toTopOf="@id/settings_list_seek"
app:layout_constraintBottom_toTopOf="@id/settings_local_timeline"
app:layout_constraintEnd_toStartOf="@id/settings_enable_twitter_alt_descr" />
<TextView
@ -402,6 +402,29 @@
app:layout_constraintBottom_toBottomOf="@id/settings_enable_twitter_alt"
app:layout_constraintEnd_toEndOf="parent" />
<com.kyleduo.switchbutton.SwitchButton
android:id="@+id/settings_local_timeline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/settings_column_margin"
android:layout_marginEnd="@dimen/settings_switch_margin"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/settings_enable_twitter_alt"
app:layout_constraintBottom_toTopOf="@id/settings_list_seek"
app:layout_constraintEnd_toStartOf="@id/settings_local_timeline_descr" />
<TextView
android:id="@+id/settings_local_timeline_descr"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:lines="1"
android:text="@string/settings_description_local_timeline"
android:textSize="@dimen/settings_textsize_small"
app:layout_constraintStart_toEndOf="@id/settings_local_timeline"
app:layout_constraintTop_toTopOf="@id/settings_local_timeline"
app:layout_constraintBottom_toBottomOf="@id/settings_local_timeline"
app:layout_constraintEnd_toEndOf="parent" />
<TextView
android:id="@+id/settings_list_seek_descr"
android:layout_width="wrap_content"
@ -419,10 +442,9 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginBottom="@dimen/settings_column_margin"
android:max="9"
app:layout_constraintStart_toEndOf="@id/settings_list_seek_descr"
app:layout_constraintTop_toBottomOf="@id/settings_enable_twitter_alt"
app:layout_constraintTop_toBottomOf="@id/settings_local_timeline_descr"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/settings_list_size" />

View File

@ -9,11 +9,6 @@
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="always|collapseActionView" />
<item
android:id="@+id/menu_local_timeline"
android:title="@string/menu_show_local_timeline"
android:checkable="true" />
<item
android:id="@+id/menu_profile"
android:title="@string/menu_open_home_profile"

View File

@ -267,7 +267,6 @@
<string name="info_missing_key">bitte Schlüssel eingeben</string>
<string name="info_missing_host">bitte gültigen Hostnamen eingeben</string>
<string name="info_missing_api_keys">Bitte API-Schlüssel hinzufügen</string>
<string name="menu_show_local_timeline">zeige lokale Timeline</string>
<string name="info_status_bookmarked">Status zu Lesezeichen hinzugefügt</string>
<string name="info_status_unbookmarked">Status aus Lesezeichen entfernt</string>
<string name="settings_bookmark_color">Lesezeichen symbol</string>
@ -285,4 +284,11 @@
<string name="dialog_poll_duration_hint">Dauer</string>
<string name="poll_option_edit_button">hinzufügen/entfernen</string>
<string name="status_add_poll">Umfrage hinzufügen</string>
<string name="status_pref">Statuseinstellungen</string>
<string name="settings_description_local_timeline">nur lokale Timeline zeigen</string>
<string name="dialog_poll_close">Dialogfenster schließen</string>
<string name="dialog_status_title">Statuseinstellungen</string>
<string name="dialog_status_sensitive">sensibel</string>
<string name="dialog_status_spoiler">Spoiler</string>
<string name="dialog_status_visibility">Sichtbarkeit</string>
</resources>

View File

@ -146,7 +146,6 @@
<string name="menu_excluded_users">Blocklists</string>
<string name="menu_exclude_user">exclude user</string>
<string name="menu_search_filter">filter results</string>
<string name="menu_show_local_timeline">show local timeline</string>
<string name="menu_hint_mute_user">enter @name to mute</string>
<string name="menu_hint_block_user">enter @name to block</string>
<string name="menu_refresh_exclude">refresh exclude list</string>
@ -214,7 +213,7 @@
<string name="status_add_image">add new image</string>
<string name="notification_dismiss">dismiss notification</string>
<string name="send_status">share status</string>
<string name="status_pref">status preferences</string>
<string name="status_pref">Status preferences</string>
<string name="status_add_poll">add poll</string>
<string name="status_close">close editor</string>
<string name="profile_link">Link</string>
@ -260,6 +259,7 @@
<string name="settings_enable_toolbar_overlap">Collapsed profile layout</string>
<string name="settings_look">Look</string>
<string name="settings_description_enable_twitter_alt">use nitter.net for links</string>
<string name="settings_description_local_timeline">show local timelines only</string>
<string name="item_load_more">load more</string>
<string name="item_image_save">save image</string>
<string name="item_poll_option_vote">vote</string>
@ -316,6 +316,6 @@
<string name="dialog_poll_close">close dialog</string>
<string name="dialog_status_title">Status preferences</string>
<string name="dialog_status_sensitive">sensitive</string>
<string name="dialog_status_spoiler">spoiler</string>
<string name="dialog_status_visibility">visibility</string>
<string name="dialog_status_spoiler">Spoiler</string>
<string name="dialog_status_visibility">Visibility</string>
</resources>