Loading app/src/main/java/it/niedermann/owncloud/notes/android/fragment/BaseNoteFragment.java +43 −1 Original line number Diff line number Diff line Loading @@ -3,7 +3,11 @@ package it.niedermann.owncloud.notes.android.fragment; import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; import android.app.PendingIntent; import android.content.Intent; import android.content.pm.ShortcutInfo; import android.content.pm.ShortcutManager; import android.graphics.drawable.Icon; import android.os.Build; import android.os.Bundle; import android.text.SpannableString; Loading @@ -22,13 +26,18 @@ import androidx.appcompat.widget.SearchView; import androidx.appcompat.widget.ShareActionProvider; import androidx.core.view.MenuItemCompat; import androidx.core.view.ViewCompat; import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.android.activity.EditNoteActivity; import it.niedermann.owncloud.notes.model.CloudNote; import it.niedermann.owncloud.notes.model.DBNote; import it.niedermann.owncloud.notes.persistence.NoteSQLiteOpenHelper; import it.niedermann.owncloud.notes.util.DisplayUtils; import it.niedermann.owncloud.notes.util.ICallback; import static androidx.core.content.pm.ShortcutManagerCompat.isRequestPinShortcutSupported; import static it.niedermann.owncloud.notes.android.activity.EditNoteActivity.ACTION_SHORTCUT; public abstract class BaseNoteFragment extends Fragment implements CategoryDialogFragment.CategoryDialogListener { public interface NoteFragmentListener { Loading @@ -37,6 +46,7 @@ public abstract class BaseNoteFragment extends Fragment implements CategoryDialo void onNoteUpdated(DBNote note); } private static final int MENU_ID_PIN = -1; public static final String PARAM_NOTE_ID = "noteId"; public static final String PARAM_NEWNOTE = "newNote"; private static final String SAVEDKEY_NOTE = "note"; Loading Loading @@ -146,6 +156,10 @@ public abstract class BaseNoteFragment extends Fragment implements CategoryDialo @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_note_fragment, menu); if (isRequestPinShortcutSupported(getActivity()) && android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { menu.add(Menu.NONE, MENU_ID_PIN, 110, R.string.pin_to_homescreen); } } @Override Loading @@ -171,6 +185,7 @@ public abstract class BaseNoteFragment extends Fragment implements CategoryDialo searchEditFrame.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { int oldVisibility = -1; @Override public void onGlobalLayout() { int currentVisibility = searchEditFrame.getVisibility(); Loading Loading @@ -250,6 +265,33 @@ public abstract class BaseNoteFragment extends Fragment implements CategoryDialo } return false; case MENU_ID_PIN: if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { ShortcutManager shortcutManager = getActivity().getSystemService(ShortcutManager.class); if (shortcutManager.isRequestPinShortcutSupported()) { Intent intent = new Intent(getActivity(), EditNoteActivity.class); intent.putExtra(EditNoteActivity.PARAM_NOTE_ID, note.getId()); intent.setAction(ACTION_SHORTCUT); ShortcutInfo pinShortcutInfo = new ShortcutInfo.Builder(getActivity(), note.getId() + "") .setShortLabel(note.getTitle()) .setIcon(Icon.createWithResource(getActivity().getApplicationContext(), note.isFavorite() ? R.drawable.ic_star_yellow_24dp : R.drawable.ic_star_grey_ccc_24dp)) .setIntent(intent) .build(); Intent pinnedShortcutCallbackIntent = shortcutManager.createShortcutResultIntent(pinShortcutInfo); PendingIntent successCallback = PendingIntent.getBroadcast(getActivity(), /* request code */ 0, pinnedShortcutCallbackIntent, /* flags */ 0); shortcutManager.requestPinShortcut(pinShortcutInfo, successCallback.getIntentSender()); } } return true; default: return super.onOptionsItemSelected(item); } Loading app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java +16 −1 Original line number Diff line number Diff line Loading @@ -3,9 +3,11 @@ package it.niedermann.owncloud.notes.persistence; import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.content.pm.ShortcutManager; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.os.Build; import android.text.TextUtils; import android.util.Log; Loading @@ -15,10 +17,12 @@ import androidx.annotation.WorkerThread; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.android.appwidget.NoteListWidget; import it.niedermann.owncloud.notes.android.appwidget.SingleNoteWidget; import it.niedermann.owncloud.notes.model.CloudNote; Loading Loading @@ -539,6 +543,17 @@ public class NoteSQLiteOpenHelper extends SQLiteOpenHelper { new String[]{String.valueOf(id)}); notifyNotesChanged(); getNoteServerSyncHelper().scheduleSync(true); if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { ShortcutManager shortcutManager = context.getSystemService(ShortcutManager.class); shortcutManager.getPinnedShortcuts().forEach((shortcut) -> { String shortcutId = id + ""; if (shortcut.getId().equals(shortcutId)) { Log.v(NoteSQLiteOpenHelper.class.getSimpleName(), "Removing shortcut for " + shortcutId); shortcutManager.disableShortcuts(Collections.singletonList(shortcutId), context.getResources().getString(R.string.note_has_been_deleted)); } }); } return i; } Loading app/src/main/res/menu/menu_note_fragment.xml +2 −2 Original line number Diff line number Diff line Loading @@ -32,13 +32,13 @@ <item android:id="@+id/menu_cancel" android:icon="@drawable/ic_clear_white_24dp" android:orderInCategory="110" android:orderInCategory="120" android:title="@string/simple_cancel" app:showAsAction="never" /> <item android:id="@+id/menu_delete" android:icon="@drawable/ic_delete_white_24dp" android:orderInCategory="120" android:orderInCategory="130" android:title="@string/menu_delete" app:showAsAction="never" /> Loading app/src/main/res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -157,6 +157,8 @@ <string name="simple_copy">Copy</string> <string name="simple_exception">Exception</string> <string name="copied_to_clipboard">Copied to clipboard</string> <string name="pin_to_homescreen">Pin to homescreen</string> <string name="note_has_been_deleted">This note has been deleted</string> <!-- Array: note modes --> <string-array name="noteMode_entries"> Loading build.gradle +1 −1 Original line number Diff line number Diff line Loading @@ -8,7 +8,7 @@ buildscript { } dependencies { apply plugin: 'maven' classpath 'com.android.tools.build:gradle:3.4.0' classpath 'com.android.tools.build:gradle:3.4.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files Loading Loading
app/src/main/java/it/niedermann/owncloud/notes/android/fragment/BaseNoteFragment.java +43 −1 Original line number Diff line number Diff line Loading @@ -3,7 +3,11 @@ package it.niedermann.owncloud.notes.android.fragment; import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; import android.app.PendingIntent; import android.content.Intent; import android.content.pm.ShortcutInfo; import android.content.pm.ShortcutManager; import android.graphics.drawable.Icon; import android.os.Build; import android.os.Bundle; import android.text.SpannableString; Loading @@ -22,13 +26,18 @@ import androidx.appcompat.widget.SearchView; import androidx.appcompat.widget.ShareActionProvider; import androidx.core.view.MenuItemCompat; import androidx.core.view.ViewCompat; import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.android.activity.EditNoteActivity; import it.niedermann.owncloud.notes.model.CloudNote; import it.niedermann.owncloud.notes.model.DBNote; import it.niedermann.owncloud.notes.persistence.NoteSQLiteOpenHelper; import it.niedermann.owncloud.notes.util.DisplayUtils; import it.niedermann.owncloud.notes.util.ICallback; import static androidx.core.content.pm.ShortcutManagerCompat.isRequestPinShortcutSupported; import static it.niedermann.owncloud.notes.android.activity.EditNoteActivity.ACTION_SHORTCUT; public abstract class BaseNoteFragment extends Fragment implements CategoryDialogFragment.CategoryDialogListener { public interface NoteFragmentListener { Loading @@ -37,6 +46,7 @@ public abstract class BaseNoteFragment extends Fragment implements CategoryDialo void onNoteUpdated(DBNote note); } private static final int MENU_ID_PIN = -1; public static final String PARAM_NOTE_ID = "noteId"; public static final String PARAM_NEWNOTE = "newNote"; private static final String SAVEDKEY_NOTE = "note"; Loading Loading @@ -146,6 +156,10 @@ public abstract class BaseNoteFragment extends Fragment implements CategoryDialo @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_note_fragment, menu); if (isRequestPinShortcutSupported(getActivity()) && android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { menu.add(Menu.NONE, MENU_ID_PIN, 110, R.string.pin_to_homescreen); } } @Override Loading @@ -171,6 +185,7 @@ public abstract class BaseNoteFragment extends Fragment implements CategoryDialo searchEditFrame.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { int oldVisibility = -1; @Override public void onGlobalLayout() { int currentVisibility = searchEditFrame.getVisibility(); Loading Loading @@ -250,6 +265,33 @@ public abstract class BaseNoteFragment extends Fragment implements CategoryDialo } return false; case MENU_ID_PIN: if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { ShortcutManager shortcutManager = getActivity().getSystemService(ShortcutManager.class); if (shortcutManager.isRequestPinShortcutSupported()) { Intent intent = new Intent(getActivity(), EditNoteActivity.class); intent.putExtra(EditNoteActivity.PARAM_NOTE_ID, note.getId()); intent.setAction(ACTION_SHORTCUT); ShortcutInfo pinShortcutInfo = new ShortcutInfo.Builder(getActivity(), note.getId() + "") .setShortLabel(note.getTitle()) .setIcon(Icon.createWithResource(getActivity().getApplicationContext(), note.isFavorite() ? R.drawable.ic_star_yellow_24dp : R.drawable.ic_star_grey_ccc_24dp)) .setIntent(intent) .build(); Intent pinnedShortcutCallbackIntent = shortcutManager.createShortcutResultIntent(pinShortcutInfo); PendingIntent successCallback = PendingIntent.getBroadcast(getActivity(), /* request code */ 0, pinnedShortcutCallbackIntent, /* flags */ 0); shortcutManager.requestPinShortcut(pinShortcutInfo, successCallback.getIntentSender()); } } return true; default: return super.onOptionsItemSelected(item); } Loading
app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java +16 −1 Original line number Diff line number Diff line Loading @@ -3,9 +3,11 @@ package it.niedermann.owncloud.notes.persistence; import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.content.pm.ShortcutManager; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.os.Build; import android.text.TextUtils; import android.util.Log; Loading @@ -15,10 +17,12 @@ import androidx.annotation.WorkerThread; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.android.appwidget.NoteListWidget; import it.niedermann.owncloud.notes.android.appwidget.SingleNoteWidget; import it.niedermann.owncloud.notes.model.CloudNote; Loading Loading @@ -539,6 +543,17 @@ public class NoteSQLiteOpenHelper extends SQLiteOpenHelper { new String[]{String.valueOf(id)}); notifyNotesChanged(); getNoteServerSyncHelper().scheduleSync(true); if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { ShortcutManager shortcutManager = context.getSystemService(ShortcutManager.class); shortcutManager.getPinnedShortcuts().forEach((shortcut) -> { String shortcutId = id + ""; if (shortcut.getId().equals(shortcutId)) { Log.v(NoteSQLiteOpenHelper.class.getSimpleName(), "Removing shortcut for " + shortcutId); shortcutManager.disableShortcuts(Collections.singletonList(shortcutId), context.getResources().getString(R.string.note_has_been_deleted)); } }); } return i; } Loading
app/src/main/res/menu/menu_note_fragment.xml +2 −2 Original line number Diff line number Diff line Loading @@ -32,13 +32,13 @@ <item android:id="@+id/menu_cancel" android:icon="@drawable/ic_clear_white_24dp" android:orderInCategory="110" android:orderInCategory="120" android:title="@string/simple_cancel" app:showAsAction="never" /> <item android:id="@+id/menu_delete" android:icon="@drawable/ic_delete_white_24dp" android:orderInCategory="120" android:orderInCategory="130" android:title="@string/menu_delete" app:showAsAction="never" /> Loading
app/src/main/res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -157,6 +157,8 @@ <string name="simple_copy">Copy</string> <string name="simple_exception">Exception</string> <string name="copied_to_clipboard">Copied to clipboard</string> <string name="pin_to_homescreen">Pin to homescreen</string> <string name="note_has_been_deleted">This note has been deleted</string> <!-- Array: note modes --> <string-array name="noteMode_entries"> Loading
build.gradle +1 −1 Original line number Diff line number Diff line Loading @@ -8,7 +8,7 @@ buildscript { } dependencies { apply plugin: 'maven' classpath 'com.android.tools.build:gradle:3.4.0' classpath 'com.android.tools.build:gradle:3.4.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files Loading