add project adins

This commit is contained in:
Alfrid Sanjaya Leo Putra 2024-07-25 14:44:22 +07:00
commit f8f85d679d
5299 changed files with 625430 additions and 0 deletions

View file

@ -0,0 +1,107 @@
package com.adins.mss.foundation.questiongenerator.form;
import android.content.Context;
import com.adins.mss.constant.Global;
import com.adins.mss.foundation.questiongenerator.OptionAnswerBean;
import com.adins.mss.foundation.questiongenerator.QuestionBean;
import java.util.ArrayList;
import java.util.List;
public abstract class MultiOptionQuestionViewAbstract extends QuestionView {
protected List<OptionAnswerBean> options;
protected QuestionBean bean;
public MultiOptionQuestionViewAbstract(Context context, QuestionBean bean) {
super(context, bean);
this.bean = bean;
}
public abstract void setOptions(Context context, List<OptionAnswerBean> options);
//commented, use saveAnswerToBean instead
public abstract void saveSelectedOptionToBean();
public abstract void selectOption(int id, String desc);
public void selectOption(String lovCode, String description) {
int indexOfOption = -1;
int i = 0;
for (OptionAnswerBean optAnsBean : options) {
if (lovCode.equals(optAnsBean.getCode())) {
indexOfOption = i;
break;
}
i++;
}
if (indexOfOption > -1) selectOption(i, description);
}
public OptionAnswerBean getSelectedOptionAnswer() {
//Change to Array
// return this.questionBean.getSelectedOptionAnswer();
OptionAnswerBean result = null;
List<OptionAnswerBean> selectedOptions = this.questionBean.getSelectedOptionAnswers();
if (selectedOptions != null && selectedOptions.size() > 0) {
result = this.questionBean.getSelectedOptionAnswers().get(0);
}
return result;
}
public void setSelectedOptionAnswer(OptionAnswerBean option) {
List<OptionAnswerBean> selectedOptionAnswers = new ArrayList<OptionAnswerBean>();
if (option != null) {
selectedOptionAnswers.add(option);
questionBean.setLovCode(option.getCode());
questionBean.setLookupId(option.getUuid_lookup());
} else {
questionBean.setLovCode(null);
questionBean.setLookupId(null);
}
setSelectedOptionAnswers(selectedOptionAnswers);
}
public List<OptionAnswerBean> getSelectedOptionAnswers() {
return this.questionBean.getSelectedOptionAnswers();
}
public void setSelectedOptionAnswers(List<OptionAnswerBean> options) {
//set OptionAnswerBean as selected in case old logic still exist
for (OptionAnswerBean option : options) {
if (option != null) option.setSelected(true);
}
this.questionBean.setSelectedOptionAnswers(options);
//we don't set the lovCode, because there are multiple of them
}
//Description textfield are handled in each subclass for now, changed to abstract
// public void enableDescription(Context context){
public abstract void enableDescription(Context context);
//This method select all options with lovCode in beans. Need to be called manually form subclass
//We code to use parameter instead of own selectedOptionAnswers in case it need to be from other source
public void selectSavedOptionsFromBeans(List<OptionAnswerBean> beans) {
if (beans == null) return;
for (OptionAnswerBean optAnsBean : beans) {
String lovCode = optAnsBean.getCode();
String description = null;
if (Global.AT_DROPDOWN_W_DESCRIPTION.equals(bean.getAnswer_type()) ||
Global.AT_RADIO_W_DESCRIPTION.equals(bean.getAnswer_type()) ||
Global.AT_MULTIPLE_W_DESCRIPTION.equals(bean.getAnswer_type())) {
// description = optAnsBean.getValue();
description = bean.getAnswer();
}
selectOption(lovCode, description);
}
}
}

View file

@ -0,0 +1,289 @@
/*
* Copyright 2013, Edmodo, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with the License.
* You may obtain a copy of the License in the LICENSE file, or 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.edmodo.cropper.util;
import android.content.Context;
import android.util.Pair;
import android.util.TypedValue;
import com.edmodo.cropper.cropwindow.CropOverlayView;
import com.edmodo.cropper.cropwindow.handle.Handle;
/**
* Utility class to perform basic operations with Handles.
*/
public class HandleUtil {
// Private Constants ///////////////////////////////////////////////////////
// The radius (in dp) of the touchable area around the handle. We are basing
// this value off of the recommended 48dp Rhythm. See:
// http://developer.android.com/design/style/metrics-grids.html#48dp-rhythm
private static final int TARGET_RADIUS_DP = 24;
// Public Methods //////////////////////////////////////////////////////////
/**
* Gets the default target radius (in pixels). This is the radius of the
* circular area that can be touched in order to activate the handle.
*
* @param context the Context
* @return the target radius (in pixels)
*/
public static float getTargetRadius(Context context) {
final float targetRadius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
TARGET_RADIUS_DP,
context.getResources().getDisplayMetrics());
return targetRadius;
}
/**
* Determines which, if any, of the handles are pressed given the touch
* coordinates, the bounding box, and the touch radius.
*
* @param x the x-coordinate of the touch point
* @param y the y-coordinate of the touch point
* @param left the x-coordinate of the left bound
* @param top the y-coordinate of the top bound
* @param right the x-coordinate of the right bound
* @param bottom the y-coordinate of the bottom bound
* @param targetRadius the target radius in pixels
* @return the Handle that was pressed; null if no Handle was pressed
*/
public static Handle getPressedHandle(float x,
float y,
float left,
float top,
float right,
float bottom,
float targetRadius) {
Handle pressedHandle = null;
// Note: corner-handles take precedence, then side-handles, then center.
if (HandleUtil.isInCornerTargetZone(x, y, left, top, targetRadius)) {
pressedHandle = Handle.TOP_LEFT;
} else if (HandleUtil.isInCornerTargetZone(x, y, right, top, targetRadius)) {
pressedHandle = Handle.TOP_RIGHT;
} else if (HandleUtil.isInCornerTargetZone(x, y, left, bottom, targetRadius)) {
pressedHandle = Handle.BOTTOM_LEFT;
} else if (HandleUtil.isInCornerTargetZone(x, y, right, bottom, targetRadius)) {
pressedHandle = Handle.BOTTOM_RIGHT;
} else if (HandleUtil.isInCenterTargetZone(x, y, left, top, right, bottom) && focusCenter()) {
pressedHandle = Handle.CENTER;
} else if (HandleUtil.isInHorizontalTargetZone(x, y, left, right, top, targetRadius)) {
pressedHandle = Handle.TOP;
} else if (HandleUtil.isInHorizontalTargetZone(x, y, left, right, bottom, targetRadius)) {
pressedHandle = Handle.BOTTOM;
} else if (HandleUtil.isInVerticalTargetZone(x, y, left, top, bottom, targetRadius)) {
pressedHandle = Handle.LEFT;
} else if (HandleUtil.isInVerticalTargetZone(x, y, right, top, bottom, targetRadius)) {
pressedHandle = Handle.RIGHT;
} else if (HandleUtil.isInCenterTargetZone(x, y, left, top, right, bottom) && !focusCenter()) {
pressedHandle = Handle.CENTER;
}
return pressedHandle;
}
/**
* Calculates the offset of the touch point from the precise location of the
* specified handle.
*
* @return the offset as a Pair where the x-offset is the first value and
* the y-offset is the second value; null if the handle is null
*/
public static Pair<Float, Float> getOffset(Handle handle,
float x,
float y,
float left,
float top,
float right,
float bottom) {
if (handle == null) {
return null;
}
float touchOffsetX = 0;
float touchOffsetY = 0;
// Calculate the offset from the appropriate handle.
switch (handle) {
case TOP_LEFT:
touchOffsetX = left - x;
touchOffsetY = top - y;
break;
case TOP_RIGHT:
touchOffsetX = right - x;
touchOffsetY = top - y;
break;
case BOTTOM_LEFT:
touchOffsetX = left - x;
touchOffsetY = bottom - y;
break;
case BOTTOM_RIGHT:
touchOffsetX = right - x;
touchOffsetY = bottom - y;
break;
case LEFT:
touchOffsetX = left - x;
touchOffsetY = 0;
break;
case TOP:
touchOffsetX = 0;
touchOffsetY = top - y;
break;
case RIGHT:
touchOffsetX = right - x;
touchOffsetY = 0;
break;
case BOTTOM:
touchOffsetX = 0;
touchOffsetY = bottom - y;
break;
case CENTER:
final float centerX = (right + left) / 2;
final float centerY = (top + bottom) / 2;
touchOffsetX = centerX - x;
touchOffsetY = centerY - y;
break;
}
final Pair<Float, Float> result = new Pair<Float, Float>(touchOffsetX, touchOffsetY);
return result;
}
// Private Methods /////////////////////////////////////////////////////////
/**
* Determines if the specified coordinate is in the target touch zone for a
* corner handle.
*
* @param x the x-coordinate of the touch point
* @param y the y-coordinate of the touch point
* @param handleX the x-coordinate of the corner handle
* @param handleY the y-coordinate of the corner handle
* @param targetRadius the target radius in pixels
* @return true if the touch point is in the target touch zone; false
* otherwise
*/
private static boolean isInCornerTargetZone(float x,
float y,
float handleX,
float handleY,
float targetRadius) {
if (Math.abs(x - handleX) <= targetRadius && Math.abs(y - handleY) <= targetRadius) {
return true;
}
return false;
}
/**
* Determines if the specified coordinate is in the target touch zone for a
* horizontal bar handle.
*
* @param x the x-coordinate of the touch point
* @param y the y-coordinate of the touch point
* @param handleXStart the left x-coordinate of the horizontal bar handle
* @param handleXEnd the right x-coordinate of the horizontal bar handle
* @param handleY the y-coordinate of the horizontal bar handle
* @param targetRadius the target radius in pixels
* @return true if the touch point is in the target touch zone; false
* otherwise
*/
private static boolean isInHorizontalTargetZone(float x,
float y,
float handleXStart,
float handleXEnd,
float handleY,
float targetRadius) {
if (x > handleXStart && x < handleXEnd && Math.abs(y - handleY) <= targetRadius) {
return true;
}
return false;
}
/**
* Determines if the specified coordinate is in the target touch zone for a
* vertical bar handle.
*
* @param x the x-coordinate of the touch point
* @param y the y-coordinate of the touch point
* @param handleX the x-coordinate of the vertical bar handle
* @param handleYStart the top y-coordinate of the vertical bar handle
* @param handleYEnd the bottom y-coordinate of the vertical bar handle
* @param targetRadius the target radius in pixels
* @return true if the touch point is in the target touch zone; false
* otherwise
*/
private static boolean isInVerticalTargetZone(float x,
float y,
float handleX,
float handleYStart,
float handleYEnd,
float targetRadius) {
if (Math.abs(x - handleX) <= targetRadius && y > handleYStart && y < handleYEnd) {
return true;
}
return false;
}
/**
* Determines if the specified coordinate falls anywhere inside the given
* bounds.
*
* @param x the x-coordinate of the touch point
* @param y the y-coordinate of the touch point
* @param left the x-coordinate of the left bound
* @param top the y-coordinate of the top bound
* @param right the x-coordinate of the right bound
* @param bottom the y-coordinate of the bottom bound
* @return true if the touch point is inside the bounding rectangle; false
* otherwise
*/
private static boolean isInCenterTargetZone(float x,
float y,
float left,
float top,
float right,
float bottom) {
if (x > left && x < right && y > top && y < bottom) {
return true;
}
return false;
}
/**
* Determines if the cropper should focus on the center handle or the side
* handles. If it is a small image, focus on the center handle so the user
* can move it. If it is a large image, focus on the side handles so user
* can grab them. Corresponds to the appearance of the
* RuleOfThirdsGuidelines.
*
* @return true if it is small enough such that it should focus on the
* center; less than show_guidelines limit
*/
private static boolean focusCenter() {
return (!CropOverlayView.showGuidelines());
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

View file

@ -0,0 +1,108 @@
package com.adins.mss.base.timeline;
import android.content.Context;
import androidx.loader.content.AsyncTaskLoader;
import android.util.Log;
import com.adins.mss.constant.Global;
import com.adins.mss.dao.Timeline;
import java.util.List;
public class TimelineLoader extends AsyncTaskLoader<List<Timeline>> {
public static final String TAG = "TIMELINE_AppListLoader";
private List<Timeline> objects = null;
private Context mContextLoader;
public TimelineLoader(Context context) {
super(context);
mContextLoader = context;
}
@Override
public List<Timeline> loadInBackground() {
if (Global.IS_DEV) Log.i(TAG, "+++ loadInBackground() called! +++");
TimelineManager manager = new TimelineManager(mContextLoader);
objects = manager.getAllTimeline(mContextLoader);
return objects;
}
@Override
public void deliverResult(List<Timeline> result) {
if (isReset()) {
if (Global.IS_DEV)
Log.w(TAG, "+++ Warning! An async query came in while the Loader was reset! +++");
if (result != null) {
return;
}
}
objects = result;
if (isStarted()) {
if (Global.IS_DEV) Log.i(TAG, "+++ Delivering results to the LoaderManager for" +
" the ListFragment to display! +++");
// If the Loader is in a started state, have the superclass deliver the
// results to the client.
super.deliverResult(result);
}
}
@Override
protected void onStartLoading() {
if (Global.IS_DEV) Log.i(TAG, "+++ onStartLoading() called! +++");
if (objects != null) {
// Deliver any previously loaded data immediately.
if (Global.IS_DEV) Log.i(TAG, "+++ Delivering previously loaded data to the client...");
deliverResult(objects);
}
if (takeContentChanged()) {
// When the observer detects a new installed application, it will call
// onContentChanged() on the Loader, which will cause the next call to
// takeContentChanged() to return true. If this is ever the case (or if
// the current data is null), we force a new load.
if (Global.IS_DEV)
Log.i(TAG, "+++ A content change has been detected... so force load! +++");
forceLoad();
} else if (objects == null) {
// If the current data is null... then we should make it non-null! :)
if (Global.IS_DEV)
Log.i(TAG, "+++ The current data is data is null... so force load! +++");
forceLoad();
}
}
@Override
protected void onStopLoading() {
if (Global.IS_DEV) Log.i(TAG, "+++ onStopLoading() called! +++");
cancelLoad();
}
@Override
protected void onReset() {
if (Global.IS_DEV) Log.i(TAG, "+++ onReset() called! +++");
// Ensure the loader is stopped.
onStopLoading();
// At this point we can release the resources associated with 'apps'.
if (objects != null) {
objects = null;
}
}
@Override
public void onCanceled(List<Timeline> apps) {
if (Global.IS_DEV) Log.i(TAG, "+++ onCanceled() called! +++");
// Attempt to cancel the current asynchronous load.
super.onCanceled(apps);
}
@Override
public void forceLoad() {
if (Global.IS_DEV) Log.i(TAG, "+++ forceLoad() called! +++");
super.forceLoad();
}
}

View file

@ -0,0 +1,28 @@
package com.adins.mss.base.ktpValidation;
import com.adins.mss.foundation.http.MssRequestType;
import com.google.gson.annotations.SerializedName;
public class JsonRequestKtpValidation extends MssRequestType {
@SerializedName("refId")
public String refId;
@SerializedName("filter")
public String filter;
public String getRefId() {
return refId;
}
public void setRefId(String refId) {
this.refId = refId;
}
public String getFilter() {
return filter;
}
public void setFilter(String filter) {
this.filter = filter;
}
}

View file

@ -0,0 +1,187 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/taskListLayout"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center"
android:id="@+id/taskItem">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="match_parent">
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:background="@color/timelineLine" />
<ImageView
android:id="@+id/timelineIcon"
android:layout_width="35dp"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:src="@drawable/attendance"
android:padding="2dp"
android:layout_marginTop="10dp"/>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.cardview.widget.CardView
android:id="@+id/taskHeader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="10dp"
app:contentPadding="5dp"
app:cardElevation="@dimen/card_shadow"
android:layout_margin="@dimen/card_margin"
app:cardBackgroundColor="@color/fontColorWhite">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/taskLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:orientation="vertical"
android:layout_weight="1">
<TextView
android:id="@+id/taskName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="5dp"
android:text="Sample Name"
android:textAppearance="?android:attr/textAppearanceSmall"
android:drawableLeft="@drawable/ic_person_color"
android:drawablePadding="5dp"/>
<TextView
android:id="@+id/taskAddress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="5dp"
android:text="Sample Address"
android:textAppearance="?android:attr/textAppearanceSmall"
android:drawableLeft="@drawable/ic_location_color"
android:drawablePadding="5dp"/>
<TextView
android:id="@+id/taskPhone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="5dp"
android:text="Sample Phone"
android:textAppearance="?android:attr/textAppearanceSmall"
android:drawableLeft="@drawable/ic_phone_color"
android:drawablePadding="5dp"/>
<TextView
android:id="@+id/taskForm"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Sample Form"
android:textAppearance="?android:attr/textAppearanceSmall"
android:drawableLeft="@drawable/ic_form_color"
android:drawablePadding="5dp"/>
<LinearLayout
android:id="@+id/collectionInfo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="5dp"
android:paddingBottom="5dp">
<TextView
android:id="@+id/taskAgreement"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:text="@string/lblAgreementNo"
android:textSize="12dp"
android:drawableLeft="@drawable/ic_form_color"
android:drawablePadding="5dp"/>
<TextView
android:id="@+id/taskAmount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:text="Amount Due"
android:textSize="12dp"
android:drawableLeft="@drawable/ic_cash_color"
android:drawablePadding="5dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/taskOverdue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:text="Overdue"
android:textSize="12dp"
android:drawableLeft="@drawable/ic_date_color"
android:drawablePadding="5dp"/>
<TextView
android:id="@+id/taskInst"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:text="Installment No"
android:textSize="12dp"
android:drawableLeft="@drawable/ic_no_color"
android:drawablePadding="5dp"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/txtslatime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_gravity="end"
android:layout_marginBottom="5dp"
android:text="TOM 11.45"
android:textSize="11dp"
android:drawableLeft="@drawable/ic_sla"
android:drawablePadding="5dp"
android:padding="5dp"
android:background="@drawable/sla_shape_green"
android:visibility="gone" />
<TextView
android:id="@+id/txtSaveDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_gravity="end"
android:text="11.45"
android:textSize="11dp"
android:paddingRight="5dp"
android:drawableLeft="@drawable/ic_save_color"
android:drawablePadding="5dp"
android:visibility="gone"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
</LinearLayout>
</LinearLayout>

View file

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/tv_white"
android:orientation="vertical">
<ScrollView
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:padding="8dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/receipt_history"
android:textSize="24sp"
android:textStyle="bold" />
<HorizontalScrollView
android:id="@+id/horizontalScrollView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:fillViewport="true">
<TableLayout
android:id="@+id/tableHeaders"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:stretchColumns="3">
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/spinner_background"
android:gravity="center_vertical"
android:paddingTop="8dp"
android:paddingBottom="8dp">
<TextView
android:gravity="center_vertical"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:text="@string/label_contract_number"
android:textColor="@color/tv_white"
android:textSize="12sp"
android:textStyle="bold" />
<TextView
android:gravity="center_vertical"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:text="@string/label_receipt_number"
android:textColor="@color/tv_white"
android:textSize="12sp"
android:textStyle="bold" />
<TextView
android:gravity="center_vertical"
android:minWidth="70dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:text="@string/label_payment_date"
android:textColor="@color/tv_white"
android:textSize="12sp"
android:textStyle="bold" />
<TextView
android:gravity="center_vertical"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:text="@string/label_file"
android:textColor="@color/tv_white"
android:textSize="12sp"
android:textStyle="bold" />
</TableRow>
</TableLayout>
</HorizontalScrollView>
</LinearLayout>
</ScrollView>
</LinearLayout>

View file

@ -0,0 +1,192 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bgColor">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:background="@drawable/header"
app:titleTextAppearance="?android:attr/textAppearanceSmall"
android:titleTextColor="@color/fontColorWhite"
app:popupTheme="@style/ThemeOverlay.AppCompat.ActionBar"
app:layout_collapseMode="pin"
android:fitsSystemWindows="true" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.cardview.widget.CardView
android:id="@+id/collActivityContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
app:cardCornerRadius="10dp"
app:contentPadding="7dp"
app:cardElevation="@dimen/card_shadow"
android:layout_marginTop="@dimen/card_margin"
android:layout_marginLeft="@dimen/card_margin"
android:layout_marginRight="@dimen/card_margin"
android:layout_marginBottom="60dp"
app:cardBackgroundColor="@color/fontColorWhite">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/agreementNo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_agreement_number"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textStyle="bold"
android:textColor="@color/colorMC"
android:paddingBottom="10dp"/>
<TextView
android:id="@+id/agreementNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textStyle="bold"
android:textColor="@color/colorMC"
android:paddingBottom="10dp"/>
</LinearLayout>
<HorizontalScrollView
android:id="@+id/horizontalScrollView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:fillViewport="true">
<TableLayout
android:id="@+id/tableHeaders"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:stretchColumns="4">
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<TextView
android:gravity="center_horizontal"
android:text="No"
android:textAppearance="?android:attr/textAppearanceSmall"
android:paddingTop="5dp"
android:paddingBottom="5dp"/>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/timelineLine" />
<TextView
android:gravity="center_horizontal"
android:text="@string/label_activity_date"
android:textAppearance="?android:attr/textAppearanceSmall" />
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/timelineLine" />
<TextView
android:gravity="center_horizontal"
android:minWidth="50dp"
android:text="@string/label_action"
android:textAppearance="?android:attr/textAppearanceSmall"/>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/timelineLine" />
<TextView
android:gravity="center_horizontal"
android:text="@string/label_collection_number"
android:textAppearance="?android:attr/textAppearanceSmall"/>
</TableRow>
<TableRow>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/timelineLine"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/timelineLine"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/timelineLine"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/timelineLine"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/timelineLine"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/timelineLine"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/timelineLine"/>
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="5dp">
<View
android:layout_width="match_parent"
android:layout_height="5dp" />
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/timelineLine" />
<View
android:layout_width="match_parent"
android:layout_height="5dp" />
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/timelineLine" />
<View
android:layout_width="match_parent"
android:layout_height="5dp" />
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="@color/timelineLine" />
<View
android:layout_width="match_parent"
android:layout_height="5dp" />
</TableRow>
</TableLayout>
</HorizontalScrollView>
</LinearLayout>
</ScrollView>
</androidx.cardview.widget.CardView>
<ImageButton
android:id="@+id/imageBtnDownload"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_margin="5dp"
app:srcCompat="@drawable/ic_file_download"
android:background="@drawable/round_shape" />
</RelativeLayout>
</LinearLayout>