Skip to content

Commit 9ab92fd

Browse files
Merge pull request #1904 from newhinton/feature/1819/disableRichEditor
Allow the user to disable direct-editing
2 parents b20ed02 + 1bcdc61 commit 9ab92fd

File tree

8 files changed

+89
-5
lines changed

8 files changed

+89
-5
lines changed

app/src/main/java/it/niedermann/owncloud/notes/edit/NoteEditFragment.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,11 @@ protected FloatingActionButton getSearchPrevButton() {
115115
return binding.directEditing;
116116
}
117117

118+
protected ExtendedFloatingActionButton getNormalEditButton() {
119+
// the edit fragment does not have a button
120+
return null;
121+
}
122+
118123
@Nullable
119124
@Override
120125
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

app/src/main/java/it/niedermann/owncloud/notes/edit/NotePreviewFragment.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ public class NotePreviewFragment extends SearchableBaseNoteFragment implements O
5858
public void onPrepareOptionsMenu(@NonNull Menu menu) {
5959
super.onPrepareOptionsMenu(menu);
6060
menu.findItem(R.id.menu_edit).setVisible(true);
61+
if(getNormalEditButton().getVisibility() == View.VISIBLE) {
62+
menu.findItem(R.id.menu_edit).setVisible(false);
63+
}
64+
6165
menu.findItem(R.id.menu_preview).setVisible(false);
6266
}
6367

@@ -92,6 +96,11 @@ protected FloatingActionButton getSearchPrevButton() {
9296
return binding.directEditing;
9397
}
9498

99+
@Override
100+
protected ExtendedFloatingActionButton getNormalEditButton() {
101+
return binding.edit;
102+
}
103+
95104
@Override
96105
protected Layout getLayout() {
97106
binding.singleNoteContent.onPreDraw();

app/src/main/java/it/niedermann/owncloud/notes/edit/SearchableBaseNoteFragment.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import androidx.annotation.Nullable;
2222
import androidx.appcompat.widget.SearchView;
2323
import androidx.core.content.ContextCompat;
24+
import androidx.preference.PreferenceManager;
2425

2526
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton;
2627
import com.google.android.material.floatingactionbutton.FloatingActionButton;
@@ -47,7 +48,7 @@ public abstract class SearchableBaseNoteFragment extends BaseNoteFragment {
4748
private SearchView searchView;
4849
private String searchQuery = null;
4950
private static final int delay = 50; // If the search string does not change after $delay ms, then the search task starts.
50-
private boolean directEditAvailable = false;
51+
private boolean directEditRemotelyAvailable = false; // avoid using this directly, instead use: isDirectEditEnabled()
5152

5253
@ColorInt
5354
private int color;
@@ -72,7 +73,7 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
7273
@Override
7374
protected void onScroll(int scrollY, int oldScrollY) {
7475
super.onScroll(scrollY, oldScrollY);
75-
if (directEditAvailable) {
76+
if (isDirectEditEnabled()) {
7677
// only show FAB if search is not active
7778
if (getSearchNextButton() == null || getSearchNextButton().getVisibility() != View.VISIBLE) {
7879
final ExtendedFloatingActionButton directFab = getDirectEditingButton();
@@ -85,7 +86,7 @@ protected void onScroll(int scrollY, int oldScrollY) {
8586
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
8687
super.onViewCreated(view, savedInstanceState);
8788
checkDirectEditingAvailable();
88-
if (directEditAvailable) {
89+
if (isDirectEditEnabled()) {
8990
final ExtendedFloatingActionButton directEditingButton = getDirectEditingButton();
9091
directEditingButton.setExtended(false);
9192
ExtendedFabUtil.toggleExtendedOnLongClick(directEditingButton);
@@ -96,18 +97,35 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
9697
});
9798
} else {
9899
getDirectEditingButton().setVisibility(View.GONE);
100+
ExtendedFloatingActionButton edit = getNormalEditButton();
101+
if(edit!=null) {
102+
edit.setVisibility(View.VISIBLE);
103+
edit.setOnClickListener(v -> {
104+
if (listener != null) {
105+
listener.changeMode(NoteFragmentListener.Mode.EDIT, true);
106+
}
107+
});
108+
}
99109
}
100110
}
101111

102112
private void checkDirectEditingAvailable() {
103113
try {
104114
final SingleSignOnAccount ssoAccount = SingleAccountHelper.getCurrentSingleSignOnAccount(requireContext());
105115
final Account localAccount = repo.getAccountByName(ssoAccount.name);
106-
directEditAvailable = localAccount != null && localAccount.isDirectEditingAvailable();
116+
directEditRemotelyAvailable = localAccount != null && localAccount.isDirectEditingAvailable();
107117
} catch (NextcloudFilesAppAccountNotFoundException | NoCurrentAccountSelectedException e) {
108118
Log.w(TAG, "checkDirectEditingAvailable: ", e);
109-
directEditAvailable = false;
119+
directEditRemotelyAvailable = false;
120+
}
121+
}
122+
123+
protected boolean isDirectEditEnabled() {
124+
if (!directEditRemotelyAvailable) {
125+
return false;
110126
}
127+
final var sp = PreferenceManager.getDefaultSharedPreferences(requireContext().getApplicationContext());
128+
return sp.getBoolean(getString(R.string.pref_key_enable_direct_edit), true);
111129
}
112130

113131
@Override
@@ -258,6 +276,7 @@ public void onSaveInstanceState(@NonNull Bundle outState) {
258276
@NonNull
259277
protected abstract ExtendedFloatingActionButton getDirectEditingButton();
260278

279+
protected abstract ExtendedFloatingActionButton getNormalEditButton();
261280

262281
private void showSearchFabs() {
263282
ExtendedFabUtil.setExtendedFabVisibility(getDirectEditingButton(), false);
@@ -353,5 +372,9 @@ public void applyBrand(int color) {
353372
util.material.themeFAB(getSearchNextButton());
354373
util.material.themeFAB(getSearchPrevButton());
355374
util.material.themeExtendedFAB(getDirectEditingButton());
375+
var editFab = getNormalEditButton();
376+
if(editFab != null) {
377+
util.material.themeExtendedFAB(editFab);
378+
}
356379
}
357380
}

app/src/main/java/it/niedermann/owncloud/notes/preferences/PreferencesFragment.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public class PreferencesFragment extends PreferenceFragmentCompat implements Bra
4040
private BrandedSwitchPreference preventScreenCapturePref;
4141
private BrandedSwitchPreference backgroundSyncPref;
4242
private BrandedSwitchPreference keepScreenOnPref;
43+
private BrandedSwitchPreference enableDirectEditorPref;
4344

4445
@Override
4546
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
@@ -114,6 +115,8 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
114115
SyncWorker.update(requireContext(), (Boolean) newValue);
115116
return true;
116117
});
118+
119+
enableDirectEditorPref = findPreference(getString(R.string.pref_key_enable_direct_edit));
117120
}
118121

119122

@@ -141,5 +144,6 @@ public void applyBrand(int color) {
141144
preventScreenCapturePref.applyBrand(color);
142145
backgroundSyncPref.applyBrand(color);
143146
keepScreenOnPref.applyBrand(color);
147+
enableDirectEditorPref.applyBrand(color);
144148
}
145149
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<!--
2+
~ Nextcloud Notes - Android Client
3+
~
4+
~ SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors
5+
~ SPDX-FileCopyrightText: 2021 Andreas Gohr
6+
~ SPDX-License-Identifier: Apache-2.0
7+
-->
8+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
9+
android:width="24dp"
10+
android:height="24dp"
11+
android:viewportWidth="24"
12+
android:viewportHeight="24">
13+
<path
14+
android:fillColor="#FF757575"
15+
android:pathData="M3,7H9V13H3V7M3,3H21V5H3V3M21,7V9H11V7H21M21,11V13H11V11H21M3,15H17V17H3V15M3,19H21V21H3V19Z" />
16+
</vector>

app/src/main/res/layout/fragment_note_preview.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,19 @@
8181
app:layout_anchor="@id/scrollView"
8282
app:layout_anchorGravity="bottom|end"
8383
app:icon="@drawable/ic_rich_editing" />
84+
85+
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
86+
android:id="@+id/edit"
87+
style="?attr/floatingActionButtonPrimaryStyle"
88+
android:layout_width="wrap_content"
89+
android:layout_height="wrap_content"
90+
android:layout_gravity="bottom|end"
91+
android:layout_margin="@dimen/spacer_2x"
92+
android:contentDescription="@string/noteMode_plain_edit"
93+
android:text="@string/noteMode_plain_edit"
94+
android:visibility="visible"
95+
app:backgroundTint="@color/defaultBrand"
96+
app:layout_anchor="@id/scrollView"
97+
app:layout_anchorGravity="bottom|end"
98+
app:icon="@drawable/ic_edit_grey600_24dp" />
8499
</androidx.coordinatorlayout.widget.CoordinatorLayout>

app/src/main/res/values/strings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@
5656
<string name="settings_background_sync">Background synchronization</string>
5757
<string name="settings_prevent_screen_capture">Prevent screen capture</string>
5858
<string name="settings_gridview">Grid view</string>
59+
<string name="settings_enable_direct_edit">Direct Edit</string>
60+
<string name="settings_enable_direct_edit_summary">When disabled, the advanced editor will be hidden.</string>
5961
<string name="settings_keep_screen_on">Keep screen on</string>
6062
<string name="settings_keep_screen_on_summary">When viewing or editing a note</string>
6163

@@ -127,6 +129,7 @@
127129
<string name="pref_category_security" translatable="false">security</string>
128130
<string name="pref_key_last_note_mode" translatable="false">lastNoteMode</string>
129131
<string name="pref_key_background_sync" translatable="false">backgroundSync</string>
132+
<string name="pref_key_enable_direct_edit" translatable="false">directEditPreference</string>
130133
<string name="pref_value_mode_edit" translatable="false">edit</string>
131134
<string name="pref_value_mode_direct_edit" translatable="false">directEdit</string>
132135
<string name="pref_value_mode_preview" translatable="false">preview</string>

app/src/main/res/xml/preferences.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,15 @@
5252
android:summary="%s"
5353
android:title="@string/settings_note_mode_new" />
5454

55+
<it.niedermann.owncloud.notes.branding.BrandedSwitchPreference
56+
android:defaultValue="true"
57+
android:icon="@drawable/ic_rich_editing_grey600_24dp"
58+
android:key="@string/pref_key_enable_direct_edit"
59+
android:layout="@layout/item_pref"
60+
android:title="@string/settings_enable_direct_edit"
61+
android:summary="@string/settings_enable_direct_edit_summary" />
62+
63+
5564
<it.niedermann.owncloud.notes.branding.BrandedSwitchPreference
5665
android:icon="@drawable/ic_baseline_dashboard_24"
5766
android:key="@string/pref_key_gridview"

0 commit comments

Comments
 (0)