/* * Copyright 2021 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.example.android.receivecontent; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.EditText; import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.recyclerview.widget.RecyclerView; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; /** Main activity for the demo. */ public class ReceiveContentDemoActivity extends AppCompatActivity { private AttachmentsRepo mAttachmentsRepo; private AttachmentsRecyclerViewAdapter mAttachmentsRecyclerViewAdapter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Setup the app toolbar. Toolbar toolbar = findViewById(R.id.app_toolbar); setSupportActionBar(toolbar); // Setup the repository and recycler view for attachments. mAttachmentsRepo = new AttachmentsRepo(this); ImmutableList attachments = mAttachmentsRepo.getAllUris(); RecyclerView attachmentsRecyclerView = findViewById(R.id.attachments_recycler_view); attachmentsRecyclerView.setHasFixedSize(true); mAttachmentsRecyclerViewAdapter = new AttachmentsRecyclerViewAdapter(attachments); attachmentsRecyclerView.setAdapter(mAttachmentsRecyclerViewAdapter); // Setup the listener for receiving content. MyReceiver receiver = new MyReceiver(mAttachmentsRepo, mAttachmentsRecyclerViewAdapter); LinearLayout container = findViewById(R.id.container); container.setOnReceiveContentListener(MyReceiver.SUPPORTED_MIME_TYPES, receiver); EditText textInput = findViewById(R.id.text_input); textInput.setOnReceiveContentListener(MyReceiver.SUPPORTED_MIME_TYPES, receiver); } @Override public boolean onCreateOptionsMenu(@NonNull Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.app_menu, menu); return true; } @Override public boolean onOptionsItemSelected(@NonNull MenuItem item) { if (item.getItemId() == R.id.action_clear_attachments) { deleteAllAttachments(); return true; } return false; } private void deleteAllAttachments() { ListenableFuture deleteAllFuture = MyExecutors.bg().submit(() -> { mAttachmentsRepo.deleteAll(); return null; }); Futures.addCallback(deleteAllFuture, new FutureCallback() { @Override public void onSuccess(@Nullable Void result) { mAttachmentsRecyclerViewAdapter.clearAttachments(); mAttachmentsRecyclerViewAdapter.notifyDataSetChanged(); } @Override public void onFailure(@NonNull Throwable t) { Log.e(Logcat.TAG, "Error deleting attachments", t); } }, MyExecutors.main()); } }