diff --git a/Android.mk b/Android.mk index 8ec05675043f9463bae19970bd5e8d3dfc3366d5..557a047504af0c4ace35d82d70abc0b7c1098399 100755 --- a/Android.mk +++ b/Android.mk @@ -6,6 +6,7 @@ LOCAL_MODULE_TAGS := optional LOCAL_STATIC_JAVA_LIBRARIES := android-support-v13 LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4 +LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-recyclerview LOCAL_STATIC_JAVA_LIBRARIES += xmp_toolkit LOCAL_SRC_FILES := $(call all-java-files-under, src) @@ -15,6 +16,7 @@ LOCAL_SRC_FILES += $(call all-java-files-under, src_wrapper) LOCAL_SRC_FILES += $(call all-renderscript-files-under, rs) LOCAL_RESOURCE_DIR += $(LOCAL_PATH)/res +LOCAL_RESOURCE_DIR += frameworks/support/v7/recyclerview/res include $(LOCAL_PATH)/version.mk LOCAL_AAPT_FLAGS := \ diff --git a/res/color/mode_text_selector.xml b/res/color/mode_text_selector.xml new file mode 100755 index 0000000000000000000000000000000000000000..34688f4d6b557874c731d48f0b45ba02d0e893fb --- /dev/null +++ b/res/color/mode_text_selector.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (c) 2018, The Linux Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of The Linux Foundation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_selected="true" android:color="@color/holo_blue_light" /> + <item android:color="@color/bright_foreground_holo_dark" /> +</selector> diff --git a/res/layout/camera2_mode_item.xml b/res/layout/camera2_mode_item.xml new file mode 100755 index 0000000000000000000000000000000000000000..9bb8bccc6afc64afa6b808e0acf78606f41e1f6f --- /dev/null +++ b/res/layout/camera2_mode_item.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (c) 2018, The Linux Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of The Linux Foundation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/camera2_mode_item_root" + android:layout_width="wrap_content" + android:layout_height="wrap_content"> + + <TextView + android:id="@+id/mode_text" + android:layout_width="80dp" + android:layout_height="32dp" + android:gravity="center" + android:layout_gravity="center" + android:textSize="16sp" + android:textColor="@color/mode_text_selector"/> + +</FrameLayout> \ No newline at end of file diff --git a/src/com/android/camera/data/Camera2ModeAdapter.java b/src/com/android/camera/data/Camera2ModeAdapter.java new file mode 100755 index 0000000000000000000000000000000000000000..720d46485cd84021bce26deb2b98ef7f95271399 --- /dev/null +++ b/src/com/android/camera/data/Camera2ModeAdapter.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2018, The Linux Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of The Linux Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package com.android.camera.data; + +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.TextView; +import org.codeaurora.snapcam.R; + +import java.util.List; + +public class Camera2ModeAdapter extends RecyclerView.Adapter<Camera2ModeAdapter.ViewHolder> { + private List<String> mModeList; + private int mSelectedPos = 1; + private OnItemClickListener mOnItemClickListener; + + public Camera2ModeAdapter(List<String> list) { + this.mModeList = list; + } + + public void setOnItemClickListener(OnItemClickListener listener) { + this.mOnItemClickListener = listener; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.camera2_mode_item, + parent, false); + ViewHolder viewHolder = new ViewHolder(view); + return viewHolder; + } + + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + holder.mCameraModeText.setText(mModeList.get(position)); + holder.mCameraModeText.setSelected(mSelectedPos == position); + holder.mCameraModeText.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mSelectedPos = position; + notifyDataSetChanged(); + mOnItemClickListener.onItemClick(position); + } + }); + } + + @Override + public int getItemCount() { + return mModeList.size(); + } + + public interface OnItemClickListener { + void onItemClick(int mode); + } + + class ViewHolder extends RecyclerView.ViewHolder{ + + protected TextView mCameraModeText; + + public ViewHolder(View itemView) { + super(itemView); + mCameraModeText = (TextView) itemView.findViewById(R.id.mode_text); + } + } +} \ No newline at end of file