Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit e6681440 authored by Niedermann IT-Dienstleistungen's avatar Niedermann IT-Dienstleistungen Committed by GitHub
Browse files

Merge branch 'master' into weblogin

parents dd5ea7db 00bbe3ec
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -52,9 +52,9 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap

    public final static String CREATED_NOTE = "it.niedermann.owncloud.notes.created_notes";
    public final static String CREDENTIALS_CHANGED = "it.niedermann.owncloud.notes.CREDENTIALS_CHANGED";
    public static final String ADAPTER_KEY_RECENT = "recent";
    public static final String ADAPTER_KEY_STARRED = "starred";

    private static final String ADAPTER_KEY_RECENT = "recent";
    private static final String ADAPTER_KEY_STARRED = "starred";
    private static final String SAVED_STATE_NAVIGATION_SELECTION = "navigationSelection";
    private static final String SAVED_STATE_NAVIGATION_ADAPTER_SLECTION = "navigationAdapterSelection";
    private static final String SAVED_STATE_NAVIGATION_OPEN = "navigationOpen";
@@ -231,7 +231,7 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
                if (closeNavigation) {
                    drawerLayout.closeDrawers();
                }
                refreshLists();
                refreshLists(true);
            }

            @Override
@@ -428,6 +428,9 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
    }

    private void refreshLists() {
        refreshLists(false);
    }
    private void refreshLists(final boolean scrollToTop) {
        String subtitle = "";
        if (navigationSelection.category != null) {
            if (navigationSelection.category.isEmpty()) {
@@ -451,6 +454,9 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap
            public void onNotesLoaded(List<Item> notes, boolean showCategory) {
                adapter.setShowCategory(showCategory);
                adapter.setItemList(notes);
                if(scrollToTop) {
                    listView.scrollToPosition(0);
                }
            }
        };
        new LoadNotesListTask(getApplicationContext(), callback, navigationSelection, query).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
@@ -545,8 +551,8 @@ public class NotesListViewActivity extends AppCompatActivity implements ItemAdap

                DBNote createdNote = (DBNote) data.getExtras().getSerializable(CREATED_NOTE);
                adapter.add(createdNote);
                // TODO scroll to top
            }
            listView.scrollToPosition(0);
        } else if (requestCode == server_settings) {
            // Create new Instance with new URL and credentials
            db = NoteSQLiteOpenHelper.getInstance(this);
+75 −49
Original line number Diff line number Diff line
@@ -6,75 +6,101 @@ import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.preference.PreferenceManager;
import android.widget.RemoteViews;

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 int NLW_DISPLAY_ALL = 0;
    public static final int NLW_DISPLAY_STARRED = 1;
    public static final int NLW_DISPLAY_CATEGORY = 2;

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

    private static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
                                        int appWidgetId) {
        for (int appWidgetId : appWidgetIds) {
            SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
            int displayMode = sp.getInt(NoteListWidget.WIDGET_MODE_KEY + appWidgetId, -1);
            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);

            serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
            serviceIntent.putExtra(NoteListWidget.WIDGET_MODE_KEY + appWidgetId, displayMode);

            // 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,
            PendingIntent pendingIntent = 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, 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,
            pendingIntent = PendingIntent.getActivity(context,0,
                                                        intent,
                                                        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, templateIntent,
                                                                PendingIntent.FLAG_UPDATE_CURRENT);
        Intent serviceIntent = new Intent(context, NoteListWidgetService.class);

        serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
            if (displayMode == 2) {
                serviceIntent.putExtra(NoteListWidget.WIDGET_CATEGORY_KEY + appWidgetId, category);
            }
            serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME)));
            views.setPendingIntentTemplate(R.id.note_list_widget_lv, templatePI);
        views.setRemoteAdapter(R.id.note_list_widget_lv, serviceIntent);
            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 onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    public void onReceive(Context context, Intent intent) {
        AppWidgetManager awm = AppWidgetManager.getInstance(context);
        int appWidgetIds[] = awm.getAppWidgetIds(new ComponentName(context, NoteListWidget.class));

        for (int appWidgetId : appWidgetIds) {
            updateAppWidget(context, appWidgetManager, appWidgetId);
            if (ACTION_APPWIDGET_UPDATE.equals(intent.getAction())) {
                awm.notifyAppWidgetViewDataChanged(appWidgetId, R.id.note_list_widget_lv);
            }
        }

    @Override
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
    }

    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
        super.onDeleted(context, appWidgetIds);

        AppWidgetManager manager = AppWidgetManager.getInstance(context);
        int[] appWidgetIds = manager.getAppWidgetIds(new ComponentName(context, NoteListWidget.class));
        SharedPreferences.Editor editor = PreferenceManager
                                            .getDefaultSharedPreferences(context).edit();

        for (int appWidgetId : appWidgetIds) {
            editor.remove(WIDGET_MODE_KEY + appWidgetId);
            editor.remove(WIDGET_CATEGORY_KEY + appWidgetId);
        }

        manager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.note_list_widget_lv);
        editor.apply();
    }
}
+132 −16
Original line number Diff line number Diff line
@@ -3,46 +3,162 @@ package it.niedermann.owncloud.notes.android.appwidget;
import android.app.Activity;
import android.appwidget.AppWidgetManager;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import it.niedermann.owncloud.notes.R;
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;

public class NoteListWidgetConfiguration extends AppCompatActivity {
    private static final String TAG = Activity.class.getSimpleName();

    private int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;

    private NavigationAdapter adapterCategories;
    private NavigationAdapter.NavigationItem itemRecent, itemFavorites;
    private NoteSQLiteOpenHelper db = null;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setResult(RESULT_CANCELED);
        setContentView(R.layout.activity_note_list_configuration);

        Intent intent = getIntent();
        if (!(NoteServerSyncHelper.isConfigured(this))) {
            Toast.makeText(this, R.string.widget_not_logged_in, Toast.LENGTH_LONG).show();

        if (intent.getExtras() == null) {
            // TODO Present user with app login screen
            Log.w(TAG, "onCreate: user not logged in");
            finish();
            return;

        }

        int mAppWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,
        db = NoteSQLiteOpenHelper.getInstance(this);
        final Bundle extras = getIntent().getExtras();

        if (extras != null) {
            mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,
                                            AppWidgetManager.INVALID_APPWIDGET_ID);
        }

        if (!(NoteServerSyncHelper.isConfigured(this))) {
            Toast.makeText(this, R.string.widget_not_logged_in, Toast.LENGTH_LONG).show();
        if (mAppWidgetId == AppWidgetManager.INVALID_APPWIDGET_ID) {
            finish();
        }

            // TODO Present user with app login screen
            Log.w(TAG, "onCreate: user not logged in");
        itemRecent = new NavigationAdapter.NavigationItem(NotesListViewActivity.ADAPTER_KEY_RECENT,
                                                            getString(R.string.label_all_notes),
                                                            null,
                                                            R.drawable.ic_access_time_grey600_24dp);
        itemFavorites = new NavigationAdapter.NavigationItem(NotesListViewActivity.ADAPTER_KEY_STARRED,
                                                            getString(R.string.label_favorites),
                                                            null,
                                                            R.drawable.ic_star_grey600_24dp);
        RecyclerView recyclerView;
        RecyclerView.LayoutManager layoutManager;

        adapterCategories = new NavigationAdapter(new NavigationAdapter.ClickListener() {
            @Override
            public void onItemClick(NavigationAdapter.NavigationItem item) {
                SharedPreferences.Editor sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit();

                if (item == itemRecent) {
                    sp.putInt(NoteListWidget.WIDGET_MODE_KEY +
                                    mAppWidgetId, NoteListWidget.NLW_DISPLAY_ALL);
                } else if (item == itemFavorites) {
                    sp.putInt(NoteListWidget.WIDGET_MODE_KEY +
                                    mAppWidgetId, NoteListWidget.NLW_DISPLAY_STARRED);
                } else {
            Intent retIntent = new Intent(this, NoteListWidget.class);
            retIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
            retIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
            sendBroadcast(retIntent);
            setResult(RESULT_OK, retIntent);
                    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.apply();

                Intent updateIntent = new Intent(getApplicationContext(), NoteListWidget.class);

                updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
                updateIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
                sendBroadcast(updateIntent);
                setResult(RESULT_OK, updateIntent);
                finish();
            }

            public void onIconClick(NavigationAdapter.NavigationItem item) {
                onItemClick(item);
            }
        }, false);

        recyclerView = findViewById(R.id.nlw_config_recyclerv);
        recyclerView.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(adapterCategories);
    }

    @Override
    protected void onResume() {
        super.onResume();

        new LoadCategoryListTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
    }

    private class LoadCategoryListTask extends AsyncTask<Void, Void, List<NavigationAdapter.NavigationItem>> {
        @Override
        protected List<NavigationAdapter.NavigationItem> doInBackground(Void... voids) {
            NavigationAdapter.NavigationItem itemUncategorized;
            List<NavigationAdapter.NavigationItem> categories = db.getCategories();

            if (!categories.isEmpty() && categories.get(0).label.isEmpty()) {
                itemUncategorized = categories.get(0);
                itemUncategorized.label = getString(R.string.action_uncategorized);
                itemUncategorized.icon = NavigationAdapter.ICON_NOFOLDER;
            }

            Map<String, Integer> favorites = db.getFavoritesCount();
            int numFavorites = favorites.containsKey("1") ? favorites.get("1") : 0;
            int numNonFavorites = favorites.containsKey("0") ? favorites.get("0") : 0;
            itemFavorites.count = numFavorites;
            itemRecent.count = numFavorites + numNonFavorites;

            ArrayList<NavigationAdapter.NavigationItem> items = new ArrayList<>();
            items.add(itemRecent);
            items.add(itemFavorites);

            for (NavigationAdapter.NavigationItem item : categories) {
                int slashIndex = item.label.indexOf('/');

                item.label = slashIndex < 0 ? item.label : item.label.substring(0, slashIndex);
                item.id = "category:" + item.label;
                items.add(item);
            }
            return items;
        }

        @Override
        protected void onPostExecute(List<NavigationAdapter.NavigationItem> items) {
            adapterCategories.setItems(items);
        }
    }
}
+45 −8
Original line number Diff line number Diff line
package it.niedermann.owncloud.notes.android.appwidget;

import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.RemoteViews;
import android.widget.RemoteViewsService;
@@ -16,24 +19,58 @@ import it.niedermann.owncloud.notes.model.DBNote;
import it.niedermann.owncloud.notes.persistence.NoteSQLiteOpenHelper;

public class NoteListWidgetFactory implements RemoteViewsService.RemoteViewsFactory {
    private final Context mContext;
    private final Context context;
    private final int displayMode;
    private final int appWidgetId;
    private String category;
    private final SharedPreferences sp;
    private NoteSQLiteOpenHelper db;
    private List<DBNote> dbNotes;

    NoteListWidgetFactory(Context context, Intent intent) {
        mContext = context;
        this.context = context;
        appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                                            AppWidgetManager.INVALID_APPWIDGET_ID);
        sp = PreferenceManager.getDefaultSharedPreferences(this.context);
        displayMode = sp.getInt(NoteListWidget.WIDGET_MODE_KEY + appWidgetId, -1);
    }

    @Override
    public void onCreate() {
        db = NoteSQLiteOpenHelper.getInstance(mContext);
        db = NoteSQLiteOpenHelper.getInstance(context);
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_note_list);
        AppWidgetManager awm = AppWidgetManager.getInstance(context);

        switch (displayMode)
        {
            case 0:
                views.setTextViewText(R.id.widget_note_list_title_tv, context.getString(R.string.app_name));
                break;
            case 1:
                views.setTextViewText(R.id.widget_note_list_title_tv, "Starred");
                break;
            case 2:
                category = sp.getString(NoteListWidget.WIDGET_CATEGORY_KEY + appWidgetId, null);
                if (category.equals("")) {
                    views.setTextViewText(R.id.widget_note_list_title_tv, context.getString(R.string.action_uncategorized));
                } else {
                    views.setTextViewText(R.id.widget_note_list_title_tv, category);
                }
                break;
        }

        awm.updateAppWidget(appWidgetId, views);
    }

    @Override
    public void onDataSetChanged() {
        // Stores all db notes using the default sort order (starred, modified)
        // which is how they are displayed by the widget
        if (displayMode == NoteListWidget.NLW_DISPLAY_ALL) {
            dbNotes = db.getNotes();
        } else if (displayMode == NoteListWidget.NLW_DISPLAY_STARRED) {
            dbNotes = db.searchNotes(null,null, true);
        } else if (displayMode == NoteListWidget.NLW_DISPLAY_CATEGORY) {
            dbNotes = db.searchNotes(null, category,  null);
        }
    }

    @Override
@@ -61,7 +98,7 @@ public class NoteListWidgetFactory implements RemoteViewsService.RemoteViewsFact
            return null;
        }

        RemoteViews note_content = new RemoteViews(mContext.getPackageName(),
        RemoteViews note_content = new RemoteViews(context.getPackageName(),
                                                    R.layout.widget_entry);
        DBNote note = dbNotes.get(i);
        final Intent fillInIntent = new Intent();
+1 −1
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ public class PreferencesFragment extends PreferenceFragment {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                Boolean darkTheme = (Boolean) newValue;
                Notes.setTheme(darkTheme);
                Notes.setAppTheme(darkTheme);
                getActivity().setResult(Activity.RESULT_OK);
                getActivity().finish();

Loading