LargeTemplateView.java revision 85ef1446b82c8783a50af92c4cb1389fe0d0e907
18a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk/* 28a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk * Copyright 2017 The Android Open Source Project 38a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk * 48a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk * Licensed under the Apache License, Version 2.0 (the "License"); 58a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk * you may not use this file except in compliance with the License. 68a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk * You may obtain a copy of the License at 78a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk * 88a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk * http://www.apache.org/licenses/LICENSE-2.0 98a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk * 108a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk * Unless required by applicable law or agreed to in writing, software 118a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk * distributed under the License is distributed on an "AS IS" BASIS, 128a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk * See the License for the specific language governing permissions and 148a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk * limitations under the License. 158a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk */ 168a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk 1785ef1446b82c8783a50af92c4cb1389fe0d0e907Aurimas Liutikaspackage androidx.slice.widget; 188a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk 192a7d0fcd09ed39bbeda29e024c47fca617050094Jason Monkimport android.annotation.TargetApi; 208a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monkimport android.content.Context; 218a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monkimport android.support.annotation.RestrictTo; 228a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monkimport android.support.v7.widget.LinearLayoutManager; 238a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monkimport android.support.v7.widget.RecyclerView; 24dc05204762b444dde1db9029aed2819fd72476f7Mady Mellorimport android.util.AttributeSet; 258a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk 26b794b5b0f4bcd000e098265a6ec63d4b0cf3852fMady Mellorimport java.util.List; 27b794b5b0f4bcd000e098265a6ec63d4b0cf3852fMady Mellor 2885ef1446b82c8783a50af92c4cb1389fe0d0e907Aurimas Liutikasimport androidx.slice.Slice; 2985ef1446b82c8783a50af92c4cb1389fe0d0e907Aurimas Liutikasimport androidx.slice.SliceItem; 308a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk 318a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk/** 328a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk * @hide 338a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk */ 348a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk@RestrictTo(RestrictTo.Scope.LIBRARY) 352a7d0fcd09ed39bbeda29e024c47fca617050094Jason Monk@TargetApi(24) 36dc05204762b444dde1db9029aed2819fd72476f7Mady Mellorpublic class LargeTemplateView extends SliceChildView { 378a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk 388a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk private final LargeSliceAdapter mAdapter; 398a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk private final RecyclerView mRecyclerView; 408a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk private Slice mSlice; 418a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk private boolean mIsScrollable; 42b794b5b0f4bcd000e098265a6ec63d4b0cf3852fMady Mellor private ListContent mListContent; 438a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk 448a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk public LargeTemplateView(Context context) { 458a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk super(context); 468a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk mRecyclerView = new RecyclerView(getContext()); 478a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 488a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk mAdapter = new LargeSliceAdapter(context); 498a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk mRecyclerView.setAdapter(mAdapter); 508a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk addView(mRecyclerView); 518a2763f580c71e17a0b13e682c73012e902b4232Mady Mellor } 528a2763f580c71e17a0b13e682c73012e902b4232Mady Mellor 538a2763f580c71e17a0b13e682c73012e902b4232Mady Mellor @Override 548a2763f580c71e17a0b13e682c73012e902b4232Mady Mellor public int getActualHeight() { 558a2763f580c71e17a0b13e682c73012e902b4232Mady Mellor return mListContent != null ? mListContent.getListHeight() : 0; 565b2c0ce4135a0531d1b8ddb4bd35698859678b83Mady Mellor } 575b2c0ce4135a0531d1b8ddb4bd35698859678b83Mady Mellor 585b2c0ce4135a0531d1b8ddb4bd35698859678b83Mady Mellor @Override 590922d59222960ed7c88c5e5098399e33a343c9c6Mady Mellor public void setTint(int tint) { 600922d59222960ed7c88c5e5098399e33a343c9c6Mady Mellor super.setTint(tint); 610922d59222960ed7c88c5e5098399e33a343c9c6Mady Mellor populate(); 620922d59222960ed7c88c5e5098399e33a343c9c6Mady Mellor } 630922d59222960ed7c88c5e5098399e33a343c9c6Mady Mellor 640922d59222960ed7c88c5e5098399e33a343c9c6Mady Mellor @Override 658a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk public @SliceView.SliceMode int getMode() { 668a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk return SliceView.MODE_LARGE; 678a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk } 688a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk 698a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk @Override 70abd7ffd938056760f750af041b0e6f02d2cb6e1eMady Mellor public void setSliceActionListener(SliceView.OnSliceActionListener observer) { 71238b9b6aad4ef0c63acbecfa89605a3d753931feMady Mellor mObserver = observer; 72238b9b6aad4ef0c63acbecfa89605a3d753931feMady Mellor if (mAdapter != null) { 73238b9b6aad4ef0c63acbecfa89605a3d753931feMady Mellor mAdapter.setSliceObserver(mObserver); 74238b9b6aad4ef0c63acbecfa89605a3d753931feMady Mellor } 75238b9b6aad4ef0c63acbecfa89605a3d753931feMady Mellor } 76238b9b6aad4ef0c63acbecfa89605a3d753931feMady Mellor 77238b9b6aad4ef0c63acbecfa89605a3d753931feMady Mellor @Override 78b794b5b0f4bcd000e098265a6ec63d4b0cf3852fMady Mellor public void setSliceActions(List<SliceItem> actions) { 79b794b5b0f4bcd000e098265a6ec63d4b0cf3852fMady Mellor mAdapter.setSliceActions(actions); 80b794b5b0f4bcd000e098265a6ec63d4b0cf3852fMady Mellor } 81b794b5b0f4bcd000e098265a6ec63d4b0cf3852fMady Mellor 82b794b5b0f4bcd000e098265a6ec63d4b0cf3852fMady Mellor @Override 838a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk public void setSlice(Slice slice) { 848a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk mSlice = slice; 85dc05204762b444dde1db9029aed2819fd72476f7Mady Mellor populate(); 86dc05204762b444dde1db9029aed2819fd72476f7Mady Mellor } 87dc05204762b444dde1db9029aed2819fd72476f7Mady Mellor 88dc05204762b444dde1db9029aed2819fd72476f7Mady Mellor @Override 89dc05204762b444dde1db9029aed2819fd72476f7Mady Mellor public void setStyle(AttributeSet attrs) { 90dc05204762b444dde1db9029aed2819fd72476f7Mady Mellor super.setStyle(attrs); 91dc05204762b444dde1db9029aed2819fd72476f7Mady Mellor mAdapter.setStyle(attrs); 92dc05204762b444dde1db9029aed2819fd72476f7Mady Mellor } 93dc05204762b444dde1db9029aed2819fd72476f7Mady Mellor 94dc05204762b444dde1db9029aed2819fd72476f7Mady Mellor private void populate() { 95dc05204762b444dde1db9029aed2819fd72476f7Mady Mellor if (mSlice == null) { 96dc05204762b444dde1db9029aed2819fd72476f7Mady Mellor return; 97dc05204762b444dde1db9029aed2819fd72476f7Mady Mellor } 988a2763f580c71e17a0b13e682c73012e902b4232Mady Mellor mListContent = new ListContent(getContext(), mSlice); 99b794b5b0f4bcd000e098265a6ec63d4b0cf3852fMady Mellor mAdapter.setSliceItems(mListContent.getRowItems(), mTintColor); 1008a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk } 1018a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk 1028a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk /** 1038a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk * Whether or not the content in this template should be scrollable. 1048a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk */ 1058a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk public void setScrollable(boolean isScrollable) { 1068a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk // TODO -- restrict / enable how much this view can show 1078a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk mIsScrollable = isScrollable; 1088a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk } 109df26970a23ca28c8582178e3dd0e5502d4030293Mady Mellor 110df26970a23ca28c8582178e3dd0e5502d4030293Mady Mellor @Override 111df26970a23ca28c8582178e3dd0e5502d4030293Mady Mellor public void resetView() { 112df26970a23ca28c8582178e3dd0e5502d4030293Mady Mellor mSlice = null; 113dc05204762b444dde1db9029aed2819fd72476f7Mady Mellor mAdapter.setSliceItems(null, -1); 114b794b5b0f4bcd000e098265a6ec63d4b0cf3852fMady Mellor mListContent = null; 115df26970a23ca28c8582178e3dd0e5502d4030293Mady Mellor } 1168a452e96e2308fe9515aa91b8e5b369eeefc25e7Jason Monk} 117