Search in sources :

Example 1 with RepositoryAdapter

use of com.google.android.agera.rvadapter.RepositoryAdapter in project agera by google.

the class NotesFragment method onCreate.

@Override
public void onCreate(@Nullable final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
    notesStore = notesStore(getContext().getApplicationContext());
    pool = new RecycledViewPool();
    final RowHandler<NoteGroup, List<Note>> rowHandler = rowBinder(pool, (r) -> new LinearLayoutManager(getContext(), HORIZONTAL, false), NoteGroup::getId, NoteGroup::getNotes, (r) -> dataBindingRepositoryPresenterOf(Note.class).layout(R.layout.text_layout).itemId(BR.note).handler(BR.click, (Receiver<Note>) (note) -> {
        final EditText editText = new EditText(getContext());
        editText.setId(R.id.edit);
        editText.setText(note.getNote());
        new AlertDialog.Builder(getContext()).setTitle(R.string.edit_note).setView(editText).setPositiveButton(R.string.edit, (d, i) -> notesStore.updateNote(note, editText.getText().toString())).create().show();
    }).handler(BR.longClick, (Receiver<Note>) notesStore::deleteNote).stableIdForItem(Note::getId).forList());
    adapter = repositoryAdapter().addLayout(layout(R.layout.header)).add(notesStore.getNotesRepository(), repositoryPresenterOf(NoteGroup.class).layout(R.layout.note_group_layout).stableIdForItem(NoteGroup::getId).bindWith(rowHandler).recycleWith(rowHandler).forList()).addItem(getInstance().format(new Date()), dataBindingRepositoryPresenterOf(String.class).layout(R.layout.footer).itemId(BR.string).forItem()).build();
    adapter.setHasStableIds(true);
    final DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
    backgroundRepository = repositoryWithInitialValue(Result.<Bitmap>absent()).observe().onUpdatesPerLoop().goTo(networkExecutor).getFrom(() -> "http://www.gravatar.com/avatar/4df6f4fe5976df17deeea19443d4429d?s=" + Math.max(displayMetrics.heightPixels, displayMetrics.widthPixels)).transform(url -> httpGetRequest(url).compile()).attemptTransform(httpFunction()).orEnd(Result::failure).goTo(calculationExecutor).thenTransform(input -> {
        final byte[] body = input.getBody();
        return absentIfNull(decodeByteArray(body, 0, body.length));
    }).onDeactivation(SEND_INTERRUPT).compile();
}
Also used : Bundle(android.os.Bundle) RepositoryAdapter.repositoryAdapter(com.google.android.agera.rvadapter.RepositoryAdapter.repositoryAdapter) Date(java.util.Date) HttpFunctions.httpFunction(com.google.android.agera.net.HttpFunctions.httpFunction) LayoutPresenters.layout(com.google.android.agera.rvadapter.LayoutPresenters.layout) ImageView(android.widget.ImageView) Result(com.google.android.agera.Result) Repository(com.google.android.agera.Repository) RecycledViewPool(android.support.v7.widget.RecyclerView.RecycledViewPool) NotesStore.notesStore(com.google.android.agera.testapp.NotesStore.notesStore) RowHandler.rowBinder(com.google.android.agera.testapp.RowHandler.rowBinder) Result.absentIfNull(com.google.android.agera.Result.absentIfNull) DateFormat.getInstance(java.text.DateFormat.getInstance) View(android.view.View) Updatable(com.google.android.agera.Updatable) RepositoryAdapter(com.google.android.agera.rvadapter.RepositoryAdapter) Receiver(com.google.android.agera.Receiver) Executor(java.util.concurrent.Executor) DataBindingRepositoryPresenters.dataBindingRepositoryPresenterOf(com.google.android.agera.rvdatabinding.DataBindingRepositoryPresenters.dataBindingRepositoryPresenterOf) LayoutInflater(android.view.LayoutInflater) Fragment(android.support.v4.app.Fragment) Executors.newSingleThreadExecutor(java.util.concurrent.Executors.newSingleThreadExecutor) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) Repositories.repositoryWithInitialValue(com.google.android.agera.Repositories.repositoryWithInitialValue) DisplayMetrics(android.util.DisplayMetrics) ViewGroup(android.view.ViewGroup) RepositoryPresenters.repositoryPresenterOf(com.google.android.agera.rvadapter.RepositoryPresenters.repositoryPresenterOf) AlertDialog(android.app.AlertDialog) RecyclerView(android.support.v7.widget.RecyclerView) List(java.util.List) BitmapFactory.decodeByteArray(android.graphics.BitmapFactory.decodeByteArray) Bitmap(android.graphics.Bitmap) SEND_INTERRUPT(com.google.android.agera.RepositoryConfig.SEND_INTERRUPT) HttpRequests.httpGetRequest(com.google.android.agera.net.HttpRequests.httpGetRequest) Nullable(android.support.annotation.Nullable) HORIZONTAL(android.support.v7.widget.LinearLayoutManager.HORIZONTAL) EditText(android.widget.EditText) EditText(android.widget.EditText) Receiver(com.google.android.agera.Receiver) LinearLayoutManager(android.support.v7.widget.LinearLayoutManager) DisplayMetrics(android.util.DisplayMetrics) Date(java.util.Date) RecycledViewPool(android.support.v7.widget.RecyclerView.RecycledViewPool) List(java.util.List) NotesStore.notesStore(com.google.android.agera.testapp.NotesStore.notesStore)

Example 2 with RepositoryAdapter

use of com.google.android.agera.rvadapter.RepositoryAdapter in project agera by google.

the class RowHandler method bind.

@Override
public void bind(@NonNull final TRow row, @NonNull final View view) {
    final RecyclerView recyclerView = (RecyclerView) view;
    final long id = stableId.apply(row);
    final TRowItems rowItems = data.apply(row);
    if (!(recyclerView.getAdapter() instanceof RepositoryAdapter)) {
        final MutableRepository<TRowItems> newRepository = mutableRepository(rowItems);
        final RepositoryPresenter<TRowItems> newPresenter = presenter.apply(row);
        final RepositoryAdapter newAdapter = repositoryAdapter().add(newRepository, newPresenter).build();
        recyclerView.setRecycledViewPool(pool);
        recyclerView.setLayoutManager(layoutManager.apply(row));
        adapterRepositories.put(newAdapter, newRepository);
        startedAdapters.add(newAdapter);
        newAdapter.setHasStableIds(true);
        recyclerView.setAdapter(newAdapter);
        recyclerView.addOnScrollListener(this);
        previousStableIds.put(newAdapter, id);
        newAdapter.startObserving();
    } else {
        final RepositoryAdapter adapter = (RepositoryAdapter) recyclerView.getAdapter();
        adapterRepositories.get(adapter).accept(rowItems);
        previousStableIds.put(adapter, id);
        if (!startedAdapters.contains(adapter)) {
            adapter.startObserving();
            startedAdapters.add(adapter);
        }
    }
    recyclerView.getLayoutManager().onRestoreInstanceState(itemRowStates.get(id));
}
Also used : RepositoryAdapter(com.google.android.agera.rvadapter.RepositoryAdapter) RecyclerView(android.support.v7.widget.RecyclerView)

Example 3 with RepositoryAdapter

use of com.google.android.agera.rvadapter.RepositoryAdapter in project agera by google.

the class RowHandler method accept.

@Override
public void accept(@NonNull final View view) {
    final RecyclerView recyclerView = (RecyclerView) view;
    final RepositoryAdapter adapter = (RepositoryAdapter) recyclerView.getAdapter();
    itemRowStates.put(previousStableIds.get(adapter), recyclerView.getLayoutManager().onSaveInstanceState());
    if (startedAdapters.remove(adapter)) {
        adapter.stopObserving();
    }
}
Also used : RepositoryAdapter(com.google.android.agera.rvadapter.RepositoryAdapter) RecyclerView(android.support.v7.widget.RecyclerView)

Aggregations

RecyclerView (android.support.v7.widget.RecyclerView)3 RepositoryAdapter (com.google.android.agera.rvadapter.RepositoryAdapter)3 AlertDialog (android.app.AlertDialog)1 Bitmap (android.graphics.Bitmap)1 BitmapFactory.decodeByteArray (android.graphics.BitmapFactory.decodeByteArray)1 Bundle (android.os.Bundle)1 Nullable (android.support.annotation.Nullable)1 Fragment (android.support.v4.app.Fragment)1 LinearLayoutManager (android.support.v7.widget.LinearLayoutManager)1 HORIZONTAL (android.support.v7.widget.LinearLayoutManager.HORIZONTAL)1 RecycledViewPool (android.support.v7.widget.RecyclerView.RecycledViewPool)1 DisplayMetrics (android.util.DisplayMetrics)1 LayoutInflater (android.view.LayoutInflater)1 View (android.view.View)1 ViewGroup (android.view.ViewGroup)1 EditText (android.widget.EditText)1 ImageView (android.widget.ImageView)1 Receiver (com.google.android.agera.Receiver)1 Repositories.repositoryWithInitialValue (com.google.android.agera.Repositories.repositoryWithInitialValue)1 Repository (com.google.android.agera.Repository)1