Loading app/src/main/java/it/niedermann/owncloud/notes/android/activity/SelectSingleNoteActivity.java +13 −22 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ import it.niedermann.owncloud.notes.android.appwidget.SingleNoteWidget; import it.niedermann.owncloud.notes.model.DBNote; import it.niedermann.owncloud.notes.model.Item; import it.niedermann.owncloud.notes.model.ItemAdapter; import it.niedermann.owncloud.notes.util.Notes; public class SelectSingleNoteActivity extends NotesListViewActivity { Loading @@ -26,11 +27,10 @@ public class SelectSingleNoteActivity extends NotesListViewActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setResult(Activity.RESULT_CANCELED); SwipeRefreshLayout swipeRefreshLayout = getSwipeRefreshLayout(); setResult(Activity.RESULT_CANCELED); ButterKnife.bind(this); fabCreate.setVisibility(View.GONE); Loading @@ -53,33 +53,24 @@ public class SelectSingleNoteActivity extends NotesListViewActivity { Item item = adapter.getItem(position); DBNote note = (DBNote) item; long noteID = note.getId(); Intent intent = getIntent(); Bundle extras = intent.getExtras(); int mAppWidgetId = -1; final Bundle extras = getIntent().getExtras(); if (extras != null) { mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (extras == null) { finish(); } int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); SharedPreferences.Editor sp = PreferenceManager.getDefaultSharedPreferences(this).edit(); sp.putLong(SingleNoteWidget.WIDGET_KEY + mAppWidgetId, noteID); sp.putLong(SingleNoteWidget.WIDGET_KEY + appWidgetId, noteID); sp.putBoolean(SingleNoteWidget.DARK_THEME_KEY + appWidgetId, Notes.getAppTheme(getApplicationContext())); sp.apply(); Intent retIntent = new Intent(this, SingleNoteWidget.class); retIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); retIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); sendBroadcast(retIntent); setResult(RESULT_OK, retIntent); Intent updateIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE, null, getApplicationContext(), SingleNoteWidget.class); updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {appWidgetId}); getApplicationContext().sendBroadcast(updateIntent); setResult(RESULT_OK, updateIntent); finish(); } @Override public boolean onNoteLongClick(int position, View v) { return false; } @Override public void onNoteFavoriteClick(int position, View view) { } } app/src/main/java/it/niedermann/owncloud/notes/android/appwidget/NoteListWidget.java +55 −33 Original line number Diff line number Diff line Loading @@ -15,89 +15,111 @@ import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.android.activity.EditNoteActivity; import it.niedermann.owncloud.notes.android.activity.NotesListViewActivity; import static android.appwidget.AppWidgetManager.ACTION_APPWIDGET_UPDATE; public class NoteListWidget extends AppWidgetProvider { public static final String WIDGET_MODE_KEY = "NLW_mode"; public static final String WIDGET_CATEGORY_KEY = "NLW_cat"; public static final String DARK_THEME_KEY = "NLW_darkTheme"; public static final int NLW_DISPLAY_ALL = 0; public static final int NLW_DISPLAY_STARRED = 1; public static final int NLW_DISPLAY_CATEGORY = 2; private static boolean darkTheme; @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); RemoteViews views; for (int appWidgetId : appWidgetIds) { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); int displayMode = sp.getInt(NoteListWidget.WIDGET_MODE_KEY + appWidgetId, -1); // onUpdate has been triggered before the user finished configuring the widget if (displayMode == -1) { return; } String category = sp.getString(NoteListWidget.WIDGET_CATEGORY_KEY + appWidgetId, null); Intent serviceIntent = new Intent(context, NoteListWidgetService.class); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_note_list); darkTheme = sp.getBoolean(NoteListWidget.DARK_THEME_KEY + appWidgetId, false); Intent serviceIntent = new Intent(context, NoteListWidgetService.class); serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); serviceIntent.putExtra(NoteListWidget.WIDGET_MODE_KEY + appWidgetId, displayMode); serviceIntent.putExtra(NoteListWidget.DARK_THEME_KEY + appWidgetId, darkTheme); serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME))); if (displayMode == NLW_DISPLAY_CATEGORY) { serviceIntent.putExtra(NoteListWidget.WIDGET_CATEGORY_KEY + appWidgetId, category); } // Launch application when user taps the header icon or app title Intent intent = new Intent("android.intent.action.MAIN"); intent.setComponent(new ComponentName(context.getPackageName(), NotesListViewActivity.class.getName())); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, // Open the main app if the user taps the widget header PendingIntent openAppI = PendingIntent.getActivity( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); views.setOnClickPendingIntent(R.id.widget_note_header_icon, pendingIntent); views.setOnClickPendingIntent(R.id.widget_note_list_title_tv, pendingIntent); // Launch create note activity if user taps "+" sign in header intent = new Intent(context, EditNoteActivity.class); pendingIntent = PendingIntent.getActivity(context,0, intent, // Launch create note activity if user taps "+" icon on header PendingIntent newNoteI = PendingIntent.getActivity( context,0, (new Intent(context, EditNoteActivity.class)), PendingIntent.FLAG_UPDATE_CURRENT); views.setOnClickPendingIntent(R.id.widget_note_list_create_icon, pendingIntent); Intent templateIntent = new Intent(context, EditNoteActivity.class); PendingIntent templatePI = PendingIntent.getActivity(context, 0, templateIntent, PendingIntent templatePI = PendingIntent.getActivity(context,0, (new Intent(context, EditNoteActivity.class)), PendingIntent.FLAG_UPDATE_CURRENT); if (displayMode == NLW_DISPLAY_CATEGORY) { serviceIntent.putExtra(NoteListWidget.WIDGET_CATEGORY_KEY + appWidgetId, category); } serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME))); if (darkTheme) { views = new RemoteViews(context.getPackageName(), R.layout.widget_note_list_dark); views.setOnClickPendingIntent(R.id.widget_note_header_icon_dark, openAppI); views.setOnClickPendingIntent(R.id.widget_note_list_title_tv_dark, openAppI); views.setOnClickPendingIntent(R.id.widget_note_list_create_icon_dark, newNoteI); views.setPendingIntentTemplate(R.id.note_list_widget_lv_dark, templatePI); views.setRemoteAdapter(appWidgetId, R.id.note_list_widget_lv_dark, serviceIntent); views.setEmptyView(R.id.note_list_widget_lv_dark, R.id.widget_note_list_placeholder_tv_dark); } else { views = new RemoteViews(context.getPackageName(), R.layout.widget_note_list); views.setOnClickPendingIntent(R.id.widget_note_header_icon, openAppI); views.setOnClickPendingIntent(R.id.widget_note_list_title_tv, openAppI); views.setOnClickPendingIntent(R.id.widget_note_list_create_icon, newNoteI); views.setPendingIntentTemplate(R.id.note_list_widget_lv, templatePI); views.setRemoteAdapter(appWidgetId, R.id.note_list_widget_lv, serviceIntent); views.setEmptyView(R.id.note_list_widget_lv, R.id.widget_note_list_placeholder_tv); } appWidgetManager.updateAppWidget(appWidgetId, views); } super.onUpdate(context, appWidgetManager, appWidgetIds); } @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); AppWidgetManager awm = AppWidgetManager.getInstance(context); int appWidgetIds[] = awm.getAppWidgetIds(new ComponentName(context, NoteListWidget.class)); for (int appWidgetId : appWidgetIds) { if (ACTION_APPWIDGET_UPDATE.equals(intent.getAction())) { if (intent.getAction().equals(awm.ACTION_APPWIDGET_UPDATE)) { if (darkTheme) { awm.notifyAppWidgetViewDataChanged(appWidgetId, R.id.note_list_widget_lv_dark); } else { awm.notifyAppWidgetViewDataChanged(appWidgetId, R.id.note_list_widget_lv); } } } super.onReceive(context, intent); } @Override public void onDeleted(Context context, int[] appWidgetIds) { super.onDeleted(context, appWidgetIds); SharedPreferences.Editor editor = PreferenceManager .getDefaultSharedPreferences(context).edit(); SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); for (int appWidgetId : appWidgetIds) { editor.remove(WIDGET_MODE_KEY + appWidgetId); editor.remove(WIDGET_CATEGORY_KEY + appWidgetId); editor.remove(DARK_THEME_KEY + appWidgetId); } editor.apply(); Loading app/src/main/java/it/niedermann/owncloud/notes/android/appwidget/NoteListWidgetConfiguration.java +13 −17 Original line number Diff line number Diff line Loading @@ -23,11 +23,12 @@ import it.niedermann.owncloud.notes.android.activity.NotesListViewActivity; import it.niedermann.owncloud.notes.model.NavigationAdapter; import it.niedermann.owncloud.notes.persistence.NoteSQLiteOpenHelper; import it.niedermann.owncloud.notes.persistence.NoteServerSyncHelper; import it.niedermann.owncloud.notes.util.Notes; public class NoteListWidgetConfiguration extends AppCompatActivity { private static final String TAG = Activity.class.getSimpleName(); private int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; private int appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; private NavigationAdapter adapterCategories; private NavigationAdapter.NavigationItem itemRecent, itemFavorites; Loading @@ -45,18 +46,17 @@ public class NoteListWidgetConfiguration extends AppCompatActivity { // TODO Present user with app login screen Log.w(TAG, "onCreate: user not logged in"); finish(); } db = NoteSQLiteOpenHelper.getInstance(this); final Bundle extras = getIntent().getExtras(); if (extras != null) { mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); } if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) { if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) { finish(); } Loading @@ -77,29 +77,25 @@ public class NoteListWidgetConfiguration extends AppCompatActivity { SharedPreferences.Editor sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit(); if (item == itemRecent) { sp.putInt(NoteListWidget.WIDGET_MODE_KEY + mAppWidgetId, NoteListWidget.NLW_DISPLAY_ALL); sp.putInt(NoteListWidget.WIDGET_MODE_KEY + appWidgetId, NoteListWidget.NLW_DISPLAY_ALL); } else if (item == itemFavorites) { sp.putInt(NoteListWidget.WIDGET_MODE_KEY + mAppWidgetId, NoteListWidget.NLW_DISPLAY_STARRED); sp.putInt(NoteListWidget.WIDGET_MODE_KEY + appWidgetId, NoteListWidget.NLW_DISPLAY_STARRED); } else { String category = ""; if (!item.label.equals(getString(R.string.action_uncategorized))) { category = item.label; } sp.putInt(NoteListWidget.WIDGET_MODE_KEY + mAppWidgetId, NoteListWidget.NLW_DISPLAY_CATEGORY); sp.putString(NoteListWidget.WIDGET_CATEGORY_KEY + mAppWidgetId, category); sp.putInt(NoteListWidget.WIDGET_MODE_KEY + appWidgetId, NoteListWidget.NLW_DISPLAY_CATEGORY); sp.putString(NoteListWidget.WIDGET_CATEGORY_KEY + appWidgetId, category); } sp.putBoolean(NoteListWidget.DARK_THEME_KEY + appWidgetId, Notes.getAppTheme(getApplicationContext())); sp.apply(); Intent updateIntent = new Intent(getApplicationContext(), NoteListWidget.class); updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); updateIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); sendBroadcast(updateIntent); Intent updateIntent = new Intent( AppWidgetManager.ACTION_APPWIDGET_UPDATE, null, getApplicationContext(), NoteListWidget.class); updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {appWidgetId}); getApplicationContext().sendBroadcast(updateIntent); setResult(RESULT_OK, updateIntent); finish(); } Loading app/src/main/java/it/niedermann/owncloud/notes/android/appwidget/NoteListWidgetFactory.java +54 −12 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ public class NoteListWidgetFactory implements RemoteViewsService.RemoteViewsFact private final Context context; private final int displayMode; private final int appWidgetId; private final boolean darkTheme; private String category; private final SharedPreferences sp; private NoteSQLiteOpenHelper db; Loading @@ -33,28 +34,53 @@ public class NoteListWidgetFactory implements RemoteViewsService.RemoteViewsFact AppWidgetManager.INVALID_APPWIDGET_ID); sp = PreferenceManager.getDefaultSharedPreferences(this.context); displayMode = sp.getInt(NoteListWidget.WIDGET_MODE_KEY + appWidgetId, -1); darkTheme = sp.getBoolean(NoteListWidget.DARK_THEME_KEY + appWidgetId, false); } @Override public void onCreate() { db = NoteSQLiteOpenHelper.getInstance(context); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_note_list); RemoteViews views; if (darkTheme) { views = new RemoteViews(context.getPackageName(), R.layout.widget_note_list_dark); } else { views = new RemoteViews(context.getPackageName(), R.layout.widget_note_list); } switch (displayMode) { case NoteListWidget.NLW_DISPLAY_ALL: if (darkTheme) { views.setTextViewText(R.id.widget_note_list_title_tv_dark, context.getString(R.string.app_name)); } else { views.setTextViewText(R.id.widget_note_list_title_tv, context.getString(R.string.app_name)); } break; case NoteListWidget.NLW_DISPLAY_STARRED: views.setTextViewText(R.id.widget_note_list_title_tv, "Starred"); if (darkTheme) { views.setTextViewText(R.id.widget_note_list_title_tv_dark, context.getString(R.string.label_favorites)); } else { views.setTextViewText(R.id.widget_note_list_title_tv, context.getString(R.string.label_favorites)); } break; case NoteListWidget.NLW_DISPLAY_CATEGORY: category = sp.getString(NoteListWidget.WIDGET_CATEGORY_KEY + appWidgetId, null); category = sp.getString(NoteListWidget.WIDGET_CATEGORY_KEY + appWidgetId, ""); if (category.equals("")) { if (darkTheme) { views.setTextViewText(R.id.widget_note_list_title_tv_dark, context.getString(R.string.action_uncategorized)); } else { views.setTextViewText(R.id.widget_note_list_title_tv, context.getString(R.string.action_uncategorized)); } } else { if (darkTheme) { views.setTextViewText(R.id.widget_note_list_title_tv_dark, category); } else { views.setTextViewText(R.id.widget_note_list_title_tv, category); } } break; } Loading Loading @@ -94,12 +120,12 @@ public class NoteListWidgetFactory implements RemoteViewsService.RemoteViewsFact @Override public RemoteViews getViewAt(int i) { RemoteViews note_content; if (dbNotes == null || dbNotes.get(i) == null) { return null; } RemoteViews note_content = new RemoteViews(context.getPackageName(), R.layout.widget_entry); DBNote note = dbNotes.get(i); final Intent fillInIntent = new Intent(); final Bundle extras = new Bundle(); Loading @@ -107,14 +133,30 @@ public class NoteListWidgetFactory implements RemoteViewsService.RemoteViewsFact extras.putLong(EditNoteActivity.PARAM_NOTE_ID, note.getId()); fillInIntent.putExtras(extras); fillInIntent.setData(Uri.parse(fillInIntent.toUri(Intent.URI_INTENT_SCHEME))); if (darkTheme) { note_content = new RemoteViews(context.getPackageName(), R.layout.widget_entry_dark); note_content.setOnClickFillInIntent(R.id.widget_note_list_entry_dark, fillInIntent); note_content.setTextViewText(R.id.widget_entry_content_tv_dark, note.getTitle()); } else { note_content = new RemoteViews( context.getPackageName(), R.layout.widget_entry); note_content.setOnClickFillInIntent(R.id.widget_note_list_entry, fillInIntent); note_content.setTextViewText(R.id.widget_entry_content_tv, note.getTitle()); } if (note.isFavorite()) { if (darkTheme) { note_content.setViewVisibility(R.id.widget_entry_fav_icon_dark, View.VISIBLE); } else { note_content.setViewVisibility(R.id.widget_entry_fav_icon, View.VISIBLE); } } else { if (darkTheme) { note_content.setViewVisibility(R.id.widget_entry_fav_icon_dark, View.INVISIBLE); } else { note_content.setViewVisibility(R.id.widget_entry_fav_icon, View.INVISIBLE); } note_content.setTextViewText(R.id.widget_entry_content_tv, note.getTitle()); } return note_content; } Loading app/src/main/java/it/niedermann/owncloud/notes/android/appwidget/SingleNoteWidget.java +54 −33 Original line number Diff line number Diff line Loading @@ -14,48 +14,52 @@ import android.widget.RemoteViews; import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.android.activity.EditNoteActivity; import static android.appwidget.AppWidgetManager.ACTION_APPWIDGET_UPDATE; public class SingleNoteWidget extends AppWidgetProvider { private static boolean darkTheme; public static final String DARK_THEME_KEY = "SNW_darkTheme"; public static final String WIDGET_KEY = "single_note_widget"; @Override public void onDeleted(Context context, int[] appWidgetIds) { SharedPreferences.Editor editor = PreferenceManager .getDefaultSharedPreferences(context).edit(); static void updateAppWidget(Context context, AppWidgetManager awm, int appWidgetId) { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); Intent templateIntent = new Intent(context, EditNoteActivity.class); templateIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); for (int appWidgetId : appWidgetIds) { editor.remove(WIDGET_KEY + appWidgetId); // onUpdate has been triggered before the user finished configuring the widget if ((sp.getLong(WIDGET_KEY + appWidgetId, -1)) == -1) { return; } editor.apply(); super.onDeleted(context, appWidgetIds); } @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { for (int appWidgetId : appWidgetIds) { Intent templateIntent = new Intent(context, EditNoteActivity.class); templateIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); darkTheme = sp.getBoolean(DARK_THEME_KEY + appWidgetId, false); PendingIntent templatePendingIntent = PendingIntent.getActivity( context, appWidgetId, templateIntent, PendingIntent templatePendingIntent = PendingIntent.getActivity(context, appWidgetId, templateIntent, PendingIntent.FLAG_UPDATE_CURRENT); Intent serviceIntent = new Intent(context, SingleNoteWidgetService.class); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_single_note); serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME))); RemoteViews views; if (darkTheme) { views = new RemoteViews(context.getPackageName(), R.layout.widget_single_note_dark); views.setPendingIntentTemplate(R.id.single_note_widget_lv_dark, templatePendingIntent); views.setRemoteAdapter(R.id.single_note_widget_lv_dark, serviceIntent); views.setEmptyView(R.id.single_note_widget_lv_dark, R.id.widget_single_note_placeholder_tv_dark); } else { views = new RemoteViews(context.getPackageName(), R.layout.widget_single_note); views.setPendingIntentTemplate(R.id.single_note_widget_lv, templatePendingIntent); views.setRemoteAdapter(R.id.single_note_widget_lv, serviceIntent); views.setEmptyView(R.id.single_note_widget_lv, R.id.widget_single_note_placeholder_tv); } awm.updateAppWidget(appWidgetId, views); } appWidgetManager.updateAppWidget(appWidgetId, views); @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { for (int appWidgetId : appWidgetIds) { updateAppWidget(context, appWidgetManager, appWidgetId); } super.onUpdate(context, appWidgetManager, appWidgetIds); Loading @@ -63,17 +67,34 @@ public class SingleNoteWidget extends AppWidgetProvider { @Override public void onReceive(Context context, Intent intent) { AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); int ids[] = appWidgetManager.getAppWidgetIds(new ComponentName(context, AppWidgetManager awm = AppWidgetManager.getInstance(context); int ids[] = awm.getAppWidgetIds(new ComponentName(context, SingleNoteWidget.class)); for (int appWidgetId : ids) { if (ACTION_APPWIDGET_UPDATE.equals(intent.getAction())) { appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, R.id.single_note_widget_lv); if (intent.getAction().equals(awm.ACTION_APPWIDGET_UPDATE)) { if (darkTheme) { awm.notifyAppWidgetViewDataChanged(appWidgetId, R.id.single_note_widget_lv_dark); } else { awm.notifyAppWidgetViewDataChanged(appWidgetId, R.id.single_note_widget_lv); } } } super.onReceive(context, intent); } @Override public void onDeleted(Context context, int[] appWidgetIds) { SharedPreferences.Editor editor = PreferenceManager .getDefaultSharedPreferences(context).edit(); for (int appWidgetId : appWidgetIds) { editor.remove(WIDGET_KEY + appWidgetId); editor.remove(NoteListWidget.DARK_THEME_KEY + appWidgetId); } editor.apply(); super.onDeleted(context, appWidgetIds); } } Loading
app/src/main/java/it/niedermann/owncloud/notes/android/activity/SelectSingleNoteActivity.java +13 −22 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ import it.niedermann.owncloud.notes.android.appwidget.SingleNoteWidget; import it.niedermann.owncloud.notes.model.DBNote; import it.niedermann.owncloud.notes.model.Item; import it.niedermann.owncloud.notes.model.ItemAdapter; import it.niedermann.owncloud.notes.util.Notes; public class SelectSingleNoteActivity extends NotesListViewActivity { Loading @@ -26,11 +27,10 @@ public class SelectSingleNoteActivity extends NotesListViewActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setResult(Activity.RESULT_CANCELED); SwipeRefreshLayout swipeRefreshLayout = getSwipeRefreshLayout(); setResult(Activity.RESULT_CANCELED); ButterKnife.bind(this); fabCreate.setVisibility(View.GONE); Loading @@ -53,33 +53,24 @@ public class SelectSingleNoteActivity extends NotesListViewActivity { Item item = adapter.getItem(position); DBNote note = (DBNote) item; long noteID = note.getId(); Intent intent = getIntent(); Bundle extras = intent.getExtras(); int mAppWidgetId = -1; final Bundle extras = getIntent().getExtras(); if (extras != null) { mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); if (extras == null) { finish(); } int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); SharedPreferences.Editor sp = PreferenceManager.getDefaultSharedPreferences(this).edit(); sp.putLong(SingleNoteWidget.WIDGET_KEY + mAppWidgetId, noteID); sp.putLong(SingleNoteWidget.WIDGET_KEY + appWidgetId, noteID); sp.putBoolean(SingleNoteWidget.DARK_THEME_KEY + appWidgetId, Notes.getAppTheme(getApplicationContext())); sp.apply(); Intent retIntent = new Intent(this, SingleNoteWidget.class); retIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); retIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); sendBroadcast(retIntent); setResult(RESULT_OK, retIntent); Intent updateIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE, null, getApplicationContext(), SingleNoteWidget.class); updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {appWidgetId}); getApplicationContext().sendBroadcast(updateIntent); setResult(RESULT_OK, updateIntent); finish(); } @Override public boolean onNoteLongClick(int position, View v) { return false; } @Override public void onNoteFavoriteClick(int position, View view) { } }
app/src/main/java/it/niedermann/owncloud/notes/android/appwidget/NoteListWidget.java +55 −33 Original line number Diff line number Diff line Loading @@ -15,89 +15,111 @@ import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.android.activity.EditNoteActivity; import it.niedermann.owncloud.notes.android.activity.NotesListViewActivity; import static android.appwidget.AppWidgetManager.ACTION_APPWIDGET_UPDATE; public class NoteListWidget extends AppWidgetProvider { public static final String WIDGET_MODE_KEY = "NLW_mode"; public static final String WIDGET_CATEGORY_KEY = "NLW_cat"; public static final String DARK_THEME_KEY = "NLW_darkTheme"; public static final int NLW_DISPLAY_ALL = 0; public static final int NLW_DISPLAY_STARRED = 1; public static final int NLW_DISPLAY_CATEGORY = 2; private static boolean darkTheme; @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); RemoteViews views; for (int appWidgetId : appWidgetIds) { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); int displayMode = sp.getInt(NoteListWidget.WIDGET_MODE_KEY + appWidgetId, -1); // onUpdate has been triggered before the user finished configuring the widget if (displayMode == -1) { return; } String category = sp.getString(NoteListWidget.WIDGET_CATEGORY_KEY + appWidgetId, null); Intent serviceIntent = new Intent(context, NoteListWidgetService.class); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_note_list); darkTheme = sp.getBoolean(NoteListWidget.DARK_THEME_KEY + appWidgetId, false); Intent serviceIntent = new Intent(context, NoteListWidgetService.class); serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); serviceIntent.putExtra(NoteListWidget.WIDGET_MODE_KEY + appWidgetId, displayMode); serviceIntent.putExtra(NoteListWidget.DARK_THEME_KEY + appWidgetId, darkTheme); serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME))); if (displayMode == NLW_DISPLAY_CATEGORY) { serviceIntent.putExtra(NoteListWidget.WIDGET_CATEGORY_KEY + appWidgetId, category); } // Launch application when user taps the header icon or app title Intent intent = new Intent("android.intent.action.MAIN"); intent.setComponent(new ComponentName(context.getPackageName(), NotesListViewActivity.class.getName())); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, // Open the main app if the user taps the widget header PendingIntent openAppI = PendingIntent.getActivity( context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); views.setOnClickPendingIntent(R.id.widget_note_header_icon, pendingIntent); views.setOnClickPendingIntent(R.id.widget_note_list_title_tv, pendingIntent); // Launch create note activity if user taps "+" sign in header intent = new Intent(context, EditNoteActivity.class); pendingIntent = PendingIntent.getActivity(context,0, intent, // Launch create note activity if user taps "+" icon on header PendingIntent newNoteI = PendingIntent.getActivity( context,0, (new Intent(context, EditNoteActivity.class)), PendingIntent.FLAG_UPDATE_CURRENT); views.setOnClickPendingIntent(R.id.widget_note_list_create_icon, pendingIntent); Intent templateIntent = new Intent(context, EditNoteActivity.class); PendingIntent templatePI = PendingIntent.getActivity(context, 0, templateIntent, PendingIntent templatePI = PendingIntent.getActivity(context,0, (new Intent(context, EditNoteActivity.class)), PendingIntent.FLAG_UPDATE_CURRENT); if (displayMode == NLW_DISPLAY_CATEGORY) { serviceIntent.putExtra(NoteListWidget.WIDGET_CATEGORY_KEY + appWidgetId, category); } serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME))); if (darkTheme) { views = new RemoteViews(context.getPackageName(), R.layout.widget_note_list_dark); views.setOnClickPendingIntent(R.id.widget_note_header_icon_dark, openAppI); views.setOnClickPendingIntent(R.id.widget_note_list_title_tv_dark, openAppI); views.setOnClickPendingIntent(R.id.widget_note_list_create_icon_dark, newNoteI); views.setPendingIntentTemplate(R.id.note_list_widget_lv_dark, templatePI); views.setRemoteAdapter(appWidgetId, R.id.note_list_widget_lv_dark, serviceIntent); views.setEmptyView(R.id.note_list_widget_lv_dark, R.id.widget_note_list_placeholder_tv_dark); } else { views = new RemoteViews(context.getPackageName(), R.layout.widget_note_list); views.setOnClickPendingIntent(R.id.widget_note_header_icon, openAppI); views.setOnClickPendingIntent(R.id.widget_note_list_title_tv, openAppI); views.setOnClickPendingIntent(R.id.widget_note_list_create_icon, newNoteI); views.setPendingIntentTemplate(R.id.note_list_widget_lv, templatePI); views.setRemoteAdapter(appWidgetId, R.id.note_list_widget_lv, serviceIntent); views.setEmptyView(R.id.note_list_widget_lv, R.id.widget_note_list_placeholder_tv); } appWidgetManager.updateAppWidget(appWidgetId, views); } super.onUpdate(context, appWidgetManager, appWidgetIds); } @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); AppWidgetManager awm = AppWidgetManager.getInstance(context); int appWidgetIds[] = awm.getAppWidgetIds(new ComponentName(context, NoteListWidget.class)); for (int appWidgetId : appWidgetIds) { if (ACTION_APPWIDGET_UPDATE.equals(intent.getAction())) { if (intent.getAction().equals(awm.ACTION_APPWIDGET_UPDATE)) { if (darkTheme) { awm.notifyAppWidgetViewDataChanged(appWidgetId, R.id.note_list_widget_lv_dark); } else { awm.notifyAppWidgetViewDataChanged(appWidgetId, R.id.note_list_widget_lv); } } } super.onReceive(context, intent); } @Override public void onDeleted(Context context, int[] appWidgetIds) { super.onDeleted(context, appWidgetIds); SharedPreferences.Editor editor = PreferenceManager .getDefaultSharedPreferences(context).edit(); SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); for (int appWidgetId : appWidgetIds) { editor.remove(WIDGET_MODE_KEY + appWidgetId); editor.remove(WIDGET_CATEGORY_KEY + appWidgetId); editor.remove(DARK_THEME_KEY + appWidgetId); } editor.apply(); Loading
app/src/main/java/it/niedermann/owncloud/notes/android/appwidget/NoteListWidgetConfiguration.java +13 −17 Original line number Diff line number Diff line Loading @@ -23,11 +23,12 @@ import it.niedermann.owncloud.notes.android.activity.NotesListViewActivity; import it.niedermann.owncloud.notes.model.NavigationAdapter; import it.niedermann.owncloud.notes.persistence.NoteSQLiteOpenHelper; import it.niedermann.owncloud.notes.persistence.NoteServerSyncHelper; import it.niedermann.owncloud.notes.util.Notes; public class NoteListWidgetConfiguration extends AppCompatActivity { private static final String TAG = Activity.class.getSimpleName(); private int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; private int appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; private NavigationAdapter adapterCategories; private NavigationAdapter.NavigationItem itemRecent, itemFavorites; Loading @@ -45,18 +46,17 @@ public class NoteListWidgetConfiguration extends AppCompatActivity { // TODO Present user with app login screen Log.w(TAG, "onCreate: user not logged in"); finish(); } db = NoteSQLiteOpenHelper.getInstance(this); final Bundle extras = getIntent().getExtras(); if (extras != null) { mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); } if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) { if (appWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) { finish(); } Loading @@ -77,29 +77,25 @@ public class NoteListWidgetConfiguration extends AppCompatActivity { SharedPreferences.Editor sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit(); if (item == itemRecent) { sp.putInt(NoteListWidget.WIDGET_MODE_KEY + mAppWidgetId, NoteListWidget.NLW_DISPLAY_ALL); sp.putInt(NoteListWidget.WIDGET_MODE_KEY + appWidgetId, NoteListWidget.NLW_DISPLAY_ALL); } else if (item == itemFavorites) { sp.putInt(NoteListWidget.WIDGET_MODE_KEY + mAppWidgetId, NoteListWidget.NLW_DISPLAY_STARRED); sp.putInt(NoteListWidget.WIDGET_MODE_KEY + appWidgetId, NoteListWidget.NLW_DISPLAY_STARRED); } else { String category = ""; if (!item.label.equals(getString(R.string.action_uncategorized))) { category = item.label; } sp.putInt(NoteListWidget.WIDGET_MODE_KEY + mAppWidgetId, NoteListWidget.NLW_DISPLAY_CATEGORY); sp.putString(NoteListWidget.WIDGET_CATEGORY_KEY + mAppWidgetId, category); sp.putInt(NoteListWidget.WIDGET_MODE_KEY + appWidgetId, NoteListWidget.NLW_DISPLAY_CATEGORY); sp.putString(NoteListWidget.WIDGET_CATEGORY_KEY + appWidgetId, category); } sp.putBoolean(NoteListWidget.DARK_THEME_KEY + appWidgetId, Notes.getAppTheme(getApplicationContext())); sp.apply(); Intent updateIntent = new Intent(getApplicationContext(), NoteListWidget.class); updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); updateIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); sendBroadcast(updateIntent); Intent updateIntent = new Intent( AppWidgetManager.ACTION_APPWIDGET_UPDATE, null, getApplicationContext(), NoteListWidget.class); updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {appWidgetId}); getApplicationContext().sendBroadcast(updateIntent); setResult(RESULT_OK, updateIntent); finish(); } Loading
app/src/main/java/it/niedermann/owncloud/notes/android/appwidget/NoteListWidgetFactory.java +54 −12 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ public class NoteListWidgetFactory implements RemoteViewsService.RemoteViewsFact private final Context context; private final int displayMode; private final int appWidgetId; private final boolean darkTheme; private String category; private final SharedPreferences sp; private NoteSQLiteOpenHelper db; Loading @@ -33,28 +34,53 @@ public class NoteListWidgetFactory implements RemoteViewsService.RemoteViewsFact AppWidgetManager.INVALID_APPWIDGET_ID); sp = PreferenceManager.getDefaultSharedPreferences(this.context); displayMode = sp.getInt(NoteListWidget.WIDGET_MODE_KEY + appWidgetId, -1); darkTheme = sp.getBoolean(NoteListWidget.DARK_THEME_KEY + appWidgetId, false); } @Override public void onCreate() { db = NoteSQLiteOpenHelper.getInstance(context); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_note_list); RemoteViews views; if (darkTheme) { views = new RemoteViews(context.getPackageName(), R.layout.widget_note_list_dark); } else { views = new RemoteViews(context.getPackageName(), R.layout.widget_note_list); } switch (displayMode) { case NoteListWidget.NLW_DISPLAY_ALL: if (darkTheme) { views.setTextViewText(R.id.widget_note_list_title_tv_dark, context.getString(R.string.app_name)); } else { views.setTextViewText(R.id.widget_note_list_title_tv, context.getString(R.string.app_name)); } break; case NoteListWidget.NLW_DISPLAY_STARRED: views.setTextViewText(R.id.widget_note_list_title_tv, "Starred"); if (darkTheme) { views.setTextViewText(R.id.widget_note_list_title_tv_dark, context.getString(R.string.label_favorites)); } else { views.setTextViewText(R.id.widget_note_list_title_tv, context.getString(R.string.label_favorites)); } break; case NoteListWidget.NLW_DISPLAY_CATEGORY: category = sp.getString(NoteListWidget.WIDGET_CATEGORY_KEY + appWidgetId, null); category = sp.getString(NoteListWidget.WIDGET_CATEGORY_KEY + appWidgetId, ""); if (category.equals("")) { if (darkTheme) { views.setTextViewText(R.id.widget_note_list_title_tv_dark, context.getString(R.string.action_uncategorized)); } else { views.setTextViewText(R.id.widget_note_list_title_tv, context.getString(R.string.action_uncategorized)); } } else { if (darkTheme) { views.setTextViewText(R.id.widget_note_list_title_tv_dark, category); } else { views.setTextViewText(R.id.widget_note_list_title_tv, category); } } break; } Loading Loading @@ -94,12 +120,12 @@ public class NoteListWidgetFactory implements RemoteViewsService.RemoteViewsFact @Override public RemoteViews getViewAt(int i) { RemoteViews note_content; if (dbNotes == null || dbNotes.get(i) == null) { return null; } RemoteViews note_content = new RemoteViews(context.getPackageName(), R.layout.widget_entry); DBNote note = dbNotes.get(i); final Intent fillInIntent = new Intent(); final Bundle extras = new Bundle(); Loading @@ -107,14 +133,30 @@ public class NoteListWidgetFactory implements RemoteViewsService.RemoteViewsFact extras.putLong(EditNoteActivity.PARAM_NOTE_ID, note.getId()); fillInIntent.putExtras(extras); fillInIntent.setData(Uri.parse(fillInIntent.toUri(Intent.URI_INTENT_SCHEME))); if (darkTheme) { note_content = new RemoteViews(context.getPackageName(), R.layout.widget_entry_dark); note_content.setOnClickFillInIntent(R.id.widget_note_list_entry_dark, fillInIntent); note_content.setTextViewText(R.id.widget_entry_content_tv_dark, note.getTitle()); } else { note_content = new RemoteViews( context.getPackageName(), R.layout.widget_entry); note_content.setOnClickFillInIntent(R.id.widget_note_list_entry, fillInIntent); note_content.setTextViewText(R.id.widget_entry_content_tv, note.getTitle()); } if (note.isFavorite()) { if (darkTheme) { note_content.setViewVisibility(R.id.widget_entry_fav_icon_dark, View.VISIBLE); } else { note_content.setViewVisibility(R.id.widget_entry_fav_icon, View.VISIBLE); } } else { if (darkTheme) { note_content.setViewVisibility(R.id.widget_entry_fav_icon_dark, View.INVISIBLE); } else { note_content.setViewVisibility(R.id.widget_entry_fav_icon, View.INVISIBLE); } note_content.setTextViewText(R.id.widget_entry_content_tv, note.getTitle()); } return note_content; } Loading
app/src/main/java/it/niedermann/owncloud/notes/android/appwidget/SingleNoteWidget.java +54 −33 Original line number Diff line number Diff line Loading @@ -14,48 +14,52 @@ import android.widget.RemoteViews; import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.android.activity.EditNoteActivity; import static android.appwidget.AppWidgetManager.ACTION_APPWIDGET_UPDATE; public class SingleNoteWidget extends AppWidgetProvider { private static boolean darkTheme; public static final String DARK_THEME_KEY = "SNW_darkTheme"; public static final String WIDGET_KEY = "single_note_widget"; @Override public void onDeleted(Context context, int[] appWidgetIds) { SharedPreferences.Editor editor = PreferenceManager .getDefaultSharedPreferences(context).edit(); static void updateAppWidget(Context context, AppWidgetManager awm, int appWidgetId) { SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context); Intent templateIntent = new Intent(context, EditNoteActivity.class); templateIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); for (int appWidgetId : appWidgetIds) { editor.remove(WIDGET_KEY + appWidgetId); // onUpdate has been triggered before the user finished configuring the widget if ((sp.getLong(WIDGET_KEY + appWidgetId, -1)) == -1) { return; } editor.apply(); super.onDeleted(context, appWidgetIds); } @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { for (int appWidgetId : appWidgetIds) { Intent templateIntent = new Intent(context, EditNoteActivity.class); templateIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); darkTheme = sp.getBoolean(DARK_THEME_KEY + appWidgetId, false); PendingIntent templatePendingIntent = PendingIntent.getActivity( context, appWidgetId, templateIntent, PendingIntent templatePendingIntent = PendingIntent.getActivity(context, appWidgetId, templateIntent, PendingIntent.FLAG_UPDATE_CURRENT); Intent serviceIntent = new Intent(context, SingleNoteWidgetService.class); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_single_note); serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME))); RemoteViews views; if (darkTheme) { views = new RemoteViews(context.getPackageName(), R.layout.widget_single_note_dark); views.setPendingIntentTemplate(R.id.single_note_widget_lv_dark, templatePendingIntent); views.setRemoteAdapter(R.id.single_note_widget_lv_dark, serviceIntent); views.setEmptyView(R.id.single_note_widget_lv_dark, R.id.widget_single_note_placeholder_tv_dark); } else { views = new RemoteViews(context.getPackageName(), R.layout.widget_single_note); views.setPendingIntentTemplate(R.id.single_note_widget_lv, templatePendingIntent); views.setRemoteAdapter(R.id.single_note_widget_lv, serviceIntent); views.setEmptyView(R.id.single_note_widget_lv, R.id.widget_single_note_placeholder_tv); } awm.updateAppWidget(appWidgetId, views); } appWidgetManager.updateAppWidget(appWidgetId, views); @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { for (int appWidgetId : appWidgetIds) { updateAppWidget(context, appWidgetManager, appWidgetId); } super.onUpdate(context, appWidgetManager, appWidgetIds); Loading @@ -63,17 +67,34 @@ public class SingleNoteWidget extends AppWidgetProvider { @Override public void onReceive(Context context, Intent intent) { AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); int ids[] = appWidgetManager.getAppWidgetIds(new ComponentName(context, AppWidgetManager awm = AppWidgetManager.getInstance(context); int ids[] = awm.getAppWidgetIds(new ComponentName(context, SingleNoteWidget.class)); for (int appWidgetId : ids) { if (ACTION_APPWIDGET_UPDATE.equals(intent.getAction())) { appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, R.id.single_note_widget_lv); if (intent.getAction().equals(awm.ACTION_APPWIDGET_UPDATE)) { if (darkTheme) { awm.notifyAppWidgetViewDataChanged(appWidgetId, R.id.single_note_widget_lv_dark); } else { awm.notifyAppWidgetViewDataChanged(appWidgetId, R.id.single_note_widget_lv); } } } super.onReceive(context, intent); } @Override public void onDeleted(Context context, int[] appWidgetIds) { SharedPreferences.Editor editor = PreferenceManager .getDefaultSharedPreferences(context).edit(); for (int appWidgetId : appWidgetIds) { editor.remove(WIDGET_KEY + appWidgetId); editor.remove(NoteListWidget.DARK_THEME_KEY + appWidgetId); } editor.apply(); super.onDeleted(context, appWidgetIds); } }