1c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar/* 2c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar * Copyright (C) 2017 The Android Open Source Project 3c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar * 4c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar * Licensed under the Apache License, Version 2.0 (the "License"); 5c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar * you may not use this file except in compliance with the License. 6c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar * You may obtain a copy of the License at 7c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar * 8c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar * http://www.apache.org/licenses/LICENSE-2.0 9c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar * 10c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar * Unless required by applicable law or agreed to in writing, software 11c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar * distributed under the License is distributed on an "AS IS" BASIS, 12c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar * See the License for the specific language governing permissions and 14c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar * limitations under the License. 15c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar */ 16c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar 17564e43098c323d1a90be53c190b8fdbdde973505Sumir Katariapackage androidx.work.integration.testapp.imageprocessing; 18c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar 19c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagarimport android.arch.lifecycle.Observer; 20c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagarimport android.content.Intent; 21c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagarimport android.os.Build; 22c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagarimport android.os.Bundle; 23c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagarimport android.provider.MediaStore; 24c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagarimport android.support.v7.app.AppCompatActivity; 25c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagarimport android.support.v7.widget.LinearLayoutManager; 26c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagarimport android.support.v7.widget.RecyclerView; 27c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagarimport android.util.Log; 28c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagarimport android.view.View; 29c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar 307031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumarimport androidx.work.OneTimeWorkRequest; 31564e43098c323d1a90be53c190b8fdbdde973505Sumir Katariaimport androidx.work.WorkManager; 32564e43098c323d1a90be53c190b8fdbdde973505Sumir Katariaimport androidx.work.integration.testapp.R; 33564e43098c323d1a90be53c190b8fdbdde973505Sumir Katariaimport androidx.work.integration.testapp.db.Image; 34564e43098c323d1a90be53c190b8fdbdde973505Sumir Katariaimport androidx.work.integration.testapp.db.TestDatabase; 35564e43098c323d1a90be53c190b8fdbdde973505Sumir Kataria 3664e6bd86c786f1cb1b0c3dbc2b5307cca5c0d1f6Sumir Katariaimport java.util.List; 3764e6bd86c786f1cb1b0c3dbc2b5307cca5c0d1f6Sumir Kataria 38c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar/** 39c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar * Image Processing Activity 40c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar */ 41c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagarpublic class ImageProcessingActivity extends AppCompatActivity { 42c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar private static final int IMAGE_REQUEST_CODE = 1; 43c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar private static final String TAG = "ImageProcessingActivity"; 44c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar private ImageRecyclerViewAdapter mImageRecyclerViewAdapter; 45c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar 46c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar @Override 47c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar protected void onCreate(Bundle savedInstanceState) { 48c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar super.onCreate(savedInstanceState); 49c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar setContentView(R.layout.activity_image_processing); 50c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar 51c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar mImageRecyclerViewAdapter = new ImageRecyclerViewAdapter(); 52c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar 53c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar RecyclerView mRecyclerView = findViewById(R.id.image_recycler_view); 54c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 55c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar mRecyclerView.setAdapter(mImageRecyclerViewAdapter); 56c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar 57c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar TestDatabase.getInstance(this) 58c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar .getImageDao() 59c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar .getImagesLiveData() 60c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar .observe(this, new Observer<List<Image>>() { 61c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar @Override 62c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar public void onChanged(List<Image> images) { 63c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar mImageRecyclerViewAdapter.updateList(images); 64c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar } 65c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar }); 66c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar 67c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar findViewById(R.id.add_image).setOnClickListener(new View.OnClickListener() { 68c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar @Override 69c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar public void onClick(View v) { 70c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar Intent chooseIntent = new Intent( 71c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar Intent.ACTION_PICK, 72c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 73c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar if (Build.VERSION.SDK_INT >= 18) { 74c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar chooseIntent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); 75c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar } 76c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar startActivityForResult(chooseIntent, IMAGE_REQUEST_CODE); 77c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar } 78c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar }); 79c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar 80c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar findViewById(R.id.clear_all).setOnClickListener(new View.OnClickListener() { 81c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar @Override 82c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar public void onClick(View v) { 83c7077ec99a2bf4884a6e4f297398eb3f6df83d6fRahul Ravikumar WorkManager.getInstance() 847031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar .enqueue(OneTimeWorkRequest.from(ImageCleanupWorker.class)); 85c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar } 86c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar }); 87c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar } 88c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar 89c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar @Override 90c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar protected void onActivityResult(int requestCode, int resultCode, Intent data) { 91c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar if (requestCode == IMAGE_REQUEST_CODE && resultCode == RESULT_OK 92c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar && Build.VERSION.SDK_INT >= 16 && data.getClipData() != null) { 93c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar Log.d(TAG, "Image Selection Complete"); 94c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar int count = data.getClipData().getItemCount(); 957031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar OneTimeWorkRequest[] processingWork = new OneTimeWorkRequest[count]; 967031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar OneTimeWorkRequest[] setupWork = new OneTimeWorkRequest[count]; 97c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar for (int i = 0; i < count; i++) { 98c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar String uriString = data.getClipData().getItemAt(i).getUri().toString(); 99c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar setupWork[i] = ImageSetupWorker.createWork(uriString); 100c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar processingWork[i] = ImageProcessingWorker.createWork(uriString); 101c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar } 102c7077ec99a2bf4884a6e4f297398eb3f6df83d6fRahul Ravikumar WorkManager.getInstance() 10351b5cd2bc8a7fb7979e2bcd731fc8fd0d195f860Sumir Kataria .beginWith(setupWork) 104dc9c66fc5b9155a1264225dc2f1807a3c4b429f0Rahul Ravikumar .then(processingWork) 105dc9c66fc5b9155a1264225dc2f1807a3c4b429f0Rahul Ravikumar .enqueue(); 106c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar } else if (requestCode == IMAGE_REQUEST_CODE && resultCode == RESULT_OK 107c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar && data.getData() != null) { 108c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar Log.d(TAG, "Image Selection Complete"); 109c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar String uriString = data.getData().toString(); 1107031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar OneTimeWorkRequest setupWork = ImageSetupWorker.createWork(uriString); 1117031a0fbe12b8159ab2dc6d9c50be5b3f38477faRahul Ravikumar OneTimeWorkRequest processingWork = ImageProcessingWorker.createWork(uriString); 112c7077ec99a2bf4884a6e4f297398eb3f6df83d6fRahul Ravikumar WorkManager.getInstance() 11351b5cd2bc8a7fb7979e2bcd731fc8fd0d195f860Sumir Kataria .beginWith(setupWork) 114dc9c66fc5b9155a1264225dc2f1807a3c4b429f0Rahul Ravikumar .then(processingWork) 115dc9c66fc5b9155a1264225dc2f1807a3c4b429f0Rahul Ravikumar .enqueue(); 116c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar } else if (requestCode == IMAGE_REQUEST_CODE && resultCode == RESULT_CANCELED) { 117c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar Log.d(TAG, "Image Selection Cancelled"); 118c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar } else { 119c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar throw new UnsupportedOperationException(); 120c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar } 121c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar } 122c5c83e113f5047c3c957a6179bac88721bceb6abXyan Bhatnagar} 123