mirror of
https://github.com/freeedcom/ai-codereviewer.git
synced 2025-06-30 21:04:16 +00:00
add project adins
This commit is contained in:
parent
ad06ac5505
commit
f8f85d679d
5299 changed files with 625430 additions and 0 deletions
|
@ -0,0 +1,735 @@
|
|||
package com.adins.mss.base.loyalti.monthlypointacquisition;
|
||||
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.os.Bundle;
|
||||
import android.view.*;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
|
||||
import com.adins.mss.base.GlobalData;
|
||||
import com.adins.mss.base.R;
|
||||
import com.adins.mss.base.loyalti.barchart.LoyaltyBarChartRenderer;
|
||||
import com.adins.mss.base.loyalti.barchart.LoyaltyBarDataSet;
|
||||
import com.adins.mss.base.loyalti.barchart.LoyaltyXLabelFormatter;
|
||||
import com.adins.mss.base.loyalti.barchart.NonScrollListView;
|
||||
import com.adins.mss.base.loyalti.barchart.PointClickMarker;
|
||||
import com.adins.mss.base.loyalti.barchart.pointlegends.PointLegendsAdapter;
|
||||
import com.adins.mss.base.loyalti.barchart.ranklegends.RankLegendsAdapter;
|
||||
import com.adins.mss.base.loyalti.dailypointacquisition.DailyPointsChartView;
|
||||
import com.adins.mss.base.loyalti.model.GroupPointData;
|
||||
import com.adins.mss.base.loyalti.model.LoyaltyPointsRequest;
|
||||
import com.adins.mss.base.loyalti.model.PointDetail;
|
||||
import com.adins.mss.base.loyalti.model.RankDetail;
|
||||
import com.adins.mss.base.loyalti.monthlypointacquisition.contract.ILoyaltyPointsDataSource;
|
||||
import com.adins.mss.base.loyalti.monthlypointacquisition.contract.MonthlyPointContract;
|
||||
import com.adins.mss.base.loyalti.userhelpdummy.DummyMonthlyPointView;
|
||||
import com.adins.mss.constant.Global;
|
||||
import com.adins.mss.foundation.UserHelp.Bean.Dummy.UserHelpViewDummy;
|
||||
import com.adins.mss.foundation.UserHelp.UserHelp;
|
||||
import com.adins.mss.foundation.dialog.NiftyDialogBuilder;
|
||||
import com.adins.mss.foundation.formatter.Tool;
|
||||
import com.github.mikephil.charting.charts.BarChart;
|
||||
import com.github.mikephil.charting.components.LimitLine;
|
||||
import com.github.mikephil.charting.components.XAxis;
|
||||
import com.github.mikephil.charting.components.YAxis;
|
||||
import com.github.mikephil.charting.data.BarData;
|
||||
import com.github.mikephil.charting.data.BarDataSet;
|
||||
import com.github.mikephil.charting.data.BarEntry;
|
||||
import com.github.mikephil.charting.listener.ChartTouchListener;
|
||||
import com.github.mikephil.charting.listener.OnChartGestureListener;
|
||||
import com.github.mikephil.charting.utils.MPPointD;
|
||||
import com.google.firebase.analytics.FirebaseAnalytics;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* A simple {@link Fragment} subclass.
|
||||
*/
|
||||
public class MonthlyPointsChartView extends Fragment implements MonthlyPointContract.View, OnChartGestureListener {
|
||||
|
||||
//android views
|
||||
private Context mContext;
|
||||
private ConstraintLayout chartContent;
|
||||
private BarChart barChart;
|
||||
private NonScrollListView rankLegends;
|
||||
private NonScrollListView pointLegends;
|
||||
private TextView totalPointsV;
|
||||
private TextView currentMonthPoint;
|
||||
private TextView dailyAverageMonth;
|
||||
private TextView dailyAveragePeriod;
|
||||
private TextView preCurrentMonthPoint;
|
||||
private TextView preDailyAverageMonth;
|
||||
private TextView preTotalPoints;
|
||||
private ProgressDialog progressDialog;
|
||||
private NiftyDialogBuilder dialogBuilder;
|
||||
private ImageView arrowDailyAverageMonth;
|
||||
private ConstraintLayout chartHeader;
|
||||
|
||||
private static final String CURRENT_MONTH_POINT = "CurrentMonthPoint";
|
||||
private static final String PRE_MONTH_POINT = "PreMonthPoint";
|
||||
private static final String GRACE_POINT_NOW = "GracePointNow";
|
||||
private static final String MEMBERSHIP_PROGRAM_NAME = "MembershipProgramName";
|
||||
private static final String PROGRAM_START_DATE = "ProgramStartDate";
|
||||
private static final String MEMBERSHIP_PROGRAM_CODE = "MembershipProgramCode";
|
||||
|
||||
private FirebaseAnalytics screenName;
|
||||
|
||||
//presenter
|
||||
private MonthlyPointContract.Presenter presenter;
|
||||
|
||||
//chart data
|
||||
private int averagePoint;
|
||||
private int maxPoint;
|
||||
private int initialIdx;
|
||||
private float[][] pointDataSet;
|
||||
private RankDetail[][] rankDataSet;
|
||||
private List<RankDetail> rankDetails;
|
||||
private List<PointDetail> pointDetailsDataSet;
|
||||
private List<PointDetail> pointDetails;
|
||||
private LoyaltyXLabelFormatter xLabelFormatter;
|
||||
|
||||
|
||||
//chart colors
|
||||
int[] pointDetailColors;
|
||||
int[] rankColors;
|
||||
|
||||
public MonthlyPointsChartView() {
|
||||
// Required empty public constructor
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
View view = inflater.inflate(R.layout.fragment_monthly_point_acquisition, container, false);
|
||||
chartContent = view.findViewById(R.id.chartContent);
|
||||
barChart = view.findViewById(R.id.monthlyChart);
|
||||
rankLegends = view.findViewById(R.id.legendRanks);
|
||||
pointLegends = view.findViewById(R.id.legendPoints);
|
||||
totalPointsV = view.findViewById(R.id.totalPoints);
|
||||
currentMonthPoint = view.findViewById(R.id.currentMonthPoint);
|
||||
dailyAveragePeriod = view.findViewById(R.id.dailyAveragePeriod);
|
||||
dailyAverageMonth = view.findViewById(R.id.dailyAverageMonth);
|
||||
|
||||
chartHeader = view.findViewById(R.id.chartHeader);
|
||||
|
||||
preCurrentMonthPoint = view.findViewById(R.id.rataCurrentMonth);
|
||||
preDailyAverageMonth = view.findViewById(R.id.rataAverageMonth);
|
||||
preTotalPoints = view.findViewById(R.id.rataTotalPoints);
|
||||
|
||||
arrowDailyAverageMonth = view.findViewById(R.id.upDownAverageMonth);
|
||||
|
||||
screenName = FirebaseAnalytics.getInstance(getActivity());
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {
|
||||
super.onViewCreated(view, savedInstanceState);
|
||||
|
||||
String programName = getArguments() != null ? getArguments().getString(MEMBERSHIP_PROGRAM_NAME) : getString(R.string.monthly_point_page_title);
|
||||
String programStartDate = getArguments() != null ? getArguments().getString(PROGRAM_START_DATE) : "";
|
||||
getActivity().setTitle(programName);
|
||||
|
||||
Global.positionStack.push(1);
|
||||
chartContent.setVisibility(View.GONE);
|
||||
|
||||
ILoyaltyPointsDataSource dataSource = new LoyaltyPointsDataSource(getActivity().getApplication());
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(new Date());
|
||||
MonthlyPointsLogic monthlyPointsLogic = new MonthlyPointsLogic(dataSource, programStartDate, calendar.get(Calendar.YEAR));
|
||||
setPresenter(new MonthlyPointsPresenter(this, monthlyPointsLogic));
|
||||
if (checkUserHelpNotEmpty()) {
|
||||
showUserhelp();
|
||||
} else {
|
||||
loadMonthlyPointsData();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttach(Context context) {
|
||||
super.onAttach(context);
|
||||
initializeChartColor(context);
|
||||
setHasOptionsMenu(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
//Set Firebase screen name
|
||||
screenName.setCurrentScreen(getActivity(), getString(R.string.screen_name_monthly_graph), null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrepareOptionsMenu(final Menu menu) {
|
||||
super.onPrepareOptionsMenu(menu);
|
||||
if(checkUserHelpAvailability()){
|
||||
menu.findItem(R.id.mnGuide).setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (item.getItemId() == com.adins.mss.base.R.id.mnGuide && !Global.BACKPRESS_RESTRICTION) {
|
||||
UserHelp.reloadUserHelp(getActivity(), DummyMonthlyPointView.class.getSimpleName());
|
||||
if (checkUserHelpNotEmpty()) {
|
||||
showUserhelp();
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPresenter(MonthlyPointContract.Presenter presenter) {
|
||||
this.presenter = presenter;
|
||||
}
|
||||
|
||||
//kode request poin bulanan
|
||||
private void loadMonthlyPointsData() {
|
||||
progressDialog = ProgressDialog.show(getActivity(), "", getString(R.string.please_wait_dialog), true);
|
||||
|
||||
//dummy request
|
||||
LoyaltyPointsRequest request = new LoyaltyPointsRequest();
|
||||
request.setAudit(GlobalData.getSharedGlobalData().getAuditData());
|
||||
request.addImeiAndroidIdToUnstructured();
|
||||
String loginid = GlobalData.getSharedGlobalData().getUser().getLogin_id();
|
||||
String[] loginIdSplit = loginid.split("@");
|
||||
request.loginId = loginIdSplit[0];
|
||||
String programCode = "";
|
||||
Bundle bundle = getArguments();
|
||||
if (bundle != null)
|
||||
programCode = bundle.getString(MEMBERSHIP_PROGRAM_CODE);
|
||||
request.membershipProgramId = programCode;
|
||||
|
||||
presenter.getMonthlyPointsData(request);
|
||||
}
|
||||
|
||||
//callback data poin bulanan
|
||||
@Override
|
||||
public void onDataReceived(float[][] pointDataSet, RankDetail[][] rankDataSet, List<PointDetail> pointDetailsDataSet) {
|
||||
chartContent.setVisibility(View.VISIBLE);
|
||||
if (progressDialog.isShowing()){
|
||||
progressDialog.dismiss();
|
||||
}
|
||||
if (pointDataSet.length < 3) {
|
||||
//padding data to avoid large bar width
|
||||
float[][] newDataSet = paddingDataSet(pointDataSet, 3 - pointDataSet.length);
|
||||
for (int i = pointDataSet.length; i < newDataSet.length; i++) {
|
||||
for (int j = 0; j < newDataSet[i].length; j++) {
|
||||
PointDetail dummyPointDetail = new PointDetail(pointDetailsDataSet.get(0).rewardProgram
|
||||
, "0");
|
||||
pointDetailsDataSet.add(dummyPointDetail);
|
||||
}
|
||||
}
|
||||
pointDataSet = newDataSet;
|
||||
}
|
||||
this.pointDetailsDataSet = pointDetailsDataSet;
|
||||
initView(pointDataSet, rankDataSet);
|
||||
}
|
||||
|
||||
private float[][] paddingDataSet(float[][] pointDataSet, int padNumber) {
|
||||
float[][] newDataset = new float[pointDataSet.length + padNumber][];
|
||||
//copy values
|
||||
System.arraycopy(pointDataSet,0,newDataset,0,pointDataSet.length);
|
||||
//pad values
|
||||
for (int j = pointDataSet.length; j < newDataset.length; j++) {
|
||||
newDataset[j] = new float[]{0};
|
||||
}
|
||||
|
||||
return newDataset;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onGetDataFailed(String message) {
|
||||
if (progressDialog.isShowing()){
|
||||
progressDialog.dismiss();
|
||||
}
|
||||
chartContent.setVisibility(View.GONE);
|
||||
if (dialogBuilder == null) {
|
||||
dialogBuilder = NiftyDialogBuilder.getInstance(getActivity());
|
||||
}
|
||||
dialogBuilder.withTitle(getString(R.string.error))
|
||||
.withMessage(message);
|
||||
dialogBuilder.show();
|
||||
}
|
||||
|
||||
//kode untuk chart
|
||||
private void setPointDataSet(float[][] pointDataSet) {
|
||||
this.pointDataSet = pointDataSet;
|
||||
}
|
||||
|
||||
private void setRankDataSet(RankDetail[][] rankDataSet) {
|
||||
this.rankDataSet = rankDataSet;
|
||||
//set rank colors
|
||||
for (int i = 0; i < this.rankDataSet.length; i++) {
|
||||
for (int j = 0; j < this.rankDataSet[i].length; j++)
|
||||
this.rankDataSet[i][j].colorValue = rankColors[j];
|
||||
}
|
||||
}
|
||||
|
||||
private void setAveragePoint(int averagePoint) {
|
||||
this.averagePoint = averagePoint;
|
||||
}
|
||||
|
||||
public void setMaxPoint(int maxPoint) {
|
||||
this.maxPoint = maxPoint;
|
||||
}
|
||||
|
||||
private void setxLabelFormatter(LoyaltyXLabelFormatter xLabelFormatter) {
|
||||
this.xLabelFormatter = xLabelFormatter;
|
||||
}
|
||||
|
||||
private void setRanksLegend(List<RankDetail> rankDetails) {
|
||||
this.rankDetails = rankDetails;
|
||||
}
|
||||
|
||||
private void setPointsLegend(List<PointDetail> pointDetails) {
|
||||
for (int i = 0; i < pointDetails.size(); i++) {
|
||||
pointDetails.get(i).colorValue = pointDetailColors[i];
|
||||
}
|
||||
this.pointDetails = pointDetails;
|
||||
}
|
||||
|
||||
public void setInitIdx(int initIdx) {
|
||||
initialIdx = initIdx;
|
||||
}
|
||||
|
||||
public void initView(float[][] pointDataSet, RankDetail[][] rankDataSet) {
|
||||
//set dataset
|
||||
setPointDataSet(pointDataSet);
|
||||
setRankDataSet(rankDataSet);
|
||||
//current month
|
||||
setInitIdx(presenter.getCurrentMonth());
|
||||
//avg
|
||||
setAveragePoint((int) presenter.getAvgPoint());
|
||||
//max point
|
||||
setMaxPoint(presenter.getMaxPoint());
|
||||
//Initialize Card Header
|
||||
chartHeader.setVisibility(View.VISIBLE);
|
||||
setTotalPointsV();
|
||||
setCurrentMonthPoint();
|
||||
setDailyAverageMonth();
|
||||
setDailyAveragePeriod();
|
||||
|
||||
//set months formatter
|
||||
String[] monthLabels = presenter.getMonths();
|
||||
int padData = pointDataSet.length - monthLabels.length;//check different size
|
||||
if (padData > 0) {
|
||||
String[] padMonthLabels = new String[monthLabels.length + padData];
|
||||
for (int i = 0; i < padMonthLabels.length; i++) {
|
||||
padMonthLabels[i] = "";//set default label first
|
||||
if (i < monthLabels.length) {
|
||||
padMonthLabels[i] = monthLabels[i];
|
||||
}
|
||||
}
|
||||
monthLabels = padMonthLabels;
|
||||
}
|
||||
setxLabelFormatter(new LoyaltyXLabelFormatter(monthLabels));
|
||||
//set point details
|
||||
setPointsLegend(presenter.getPointDetails());
|
||||
//set ranks
|
||||
setRanksLegend(presenter.getRanks());
|
||||
//draw chart
|
||||
drawChart();
|
||||
}
|
||||
|
||||
private boolean checkUserHelpNotEmpty() {
|
||||
List<UserHelpViewDummy> userHelpDummyViews = Global.userHelpDummyGuide.get(DummyMonthlyPointView.class.getSimpleName());
|
||||
return Global.ENABLE_USER_HELP && userHelpDummyViews != null && !userHelpDummyViews.isEmpty();
|
||||
}
|
||||
|
||||
private void showUserhelp() {
|
||||
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
|
||||
Fragment dummyChart = new DummyMonthlyPointView();
|
||||
transaction.replace(R.id.content_frame,dummyChart);
|
||||
transaction.addToBackStack(null);
|
||||
transaction.commit();
|
||||
}
|
||||
|
||||
private void drawChart() {
|
||||
if (pointDataSet == null || pointDataSet.length == 0)
|
||||
return;
|
||||
|
||||
//set chart pointDataSet
|
||||
List<BarEntry> barEntryList = new ArrayList<>();
|
||||
for (int i = 0; i < pointDataSet.length; i++) {
|
||||
barEntryList.add(new BarEntry(i, pointDataSet[i]));
|
||||
}
|
||||
|
||||
int[] stackBarColor = new int[pointDetails.size()];
|
||||
for (int i = 0; i < stackBarColor.length; i++) {
|
||||
stackBarColor[i] = pointDetails.get(i).colorValue;
|
||||
}
|
||||
BarDataSet barDataSet = new LoyaltyBarDataSet(pointDetailsDataSet, pointDetails, barEntryList, "");
|
||||
barDataSet.setColors(stackBarColor);
|
||||
barDataSet.setDrawValues(false);
|
||||
BarData barData = new BarData(barDataSet);
|
||||
barData.setBarWidth(0.5f);
|
||||
|
||||
XAxis xAxis = barChart.getXAxis();
|
||||
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
|
||||
xAxis.setDrawGridLines(false);
|
||||
xAxis.setLabelCount(xLabelFormatter.getLabelCount());
|
||||
xAxis.setGranularity(1f);
|
||||
xAxis.setGranularityEnabled(true);
|
||||
xAxis.setValueFormatter(xLabelFormatter);
|
||||
xAxis.setTextSize(12f);
|
||||
|
||||
//right axis
|
||||
YAxis rYAxis = barChart.getAxisRight();
|
||||
rYAxis.setEnabled(false);
|
||||
rYAxis.setAxisMinimum(0f);
|
||||
rYAxis.setDrawGridLines(false);
|
||||
|
||||
//left axis
|
||||
YAxis lYAxis = barChart.getAxisLeft();
|
||||
lYAxis.setAxisMinimum(0f);
|
||||
lYAxis.setAxisMaximum(maxPoint);
|
||||
|
||||
//use custom legends
|
||||
barChart.getLegend().setEnabled(false);
|
||||
barChart.setDescription(null);
|
||||
RankLegendsAdapter rankLegendsAdapter = new RankLegendsAdapter(getActivity(), rankDetails);
|
||||
rankLegends.setAdapter(rankLegendsAdapter);
|
||||
PointLegendsAdapter pointLegendsAdapter = new PointLegendsAdapter(getActivity(), pointDetails);
|
||||
pointLegends.setAdapter(pointLegendsAdapter);
|
||||
|
||||
//set limit line
|
||||
LimitLine avgLine = new LimitLine(averagePoint, getString(R.string.average_point, averagePoint));
|
||||
avgLine.setLabelPosition(LimitLine.LimitLabelPosition.RIGHT_TOP);
|
||||
avgLine.enableDashedLine(20f, 10f, 0f);
|
||||
avgLine.setLineWidth(1f);
|
||||
avgLine.setTextColor(Color.parseColor("#32CD32"));
|
||||
avgLine.setTextSize(12f);
|
||||
avgLine.setLineColor(Color.parseColor("#32CD32"));
|
||||
lYAxis.addLimitLine(avgLine);
|
||||
|
||||
//chart settings
|
||||
//custom render bar
|
||||
LoyaltyBarChartRenderer renderer = new LoyaltyBarChartRenderer(barChart, rankDataSet, 0.3f, 0);
|
||||
barChart.setRenderer(renderer);
|
||||
|
||||
barChart.setPinchZoom(false);
|
||||
barChart.setDoubleTapToZoomEnabled(false);
|
||||
barChart.setExtraOffsets(0, 0, 0, 10f);
|
||||
barChart.setFitBars(true);
|
||||
barChart.setData(barData);
|
||||
PointClickMarker marker = new PointClickMarker(30f, 0);
|
||||
barChart.setMarker(marker);
|
||||
|
||||
//set gesture listener on this
|
||||
barChart.setOnChartGestureListener(this);
|
||||
//chart viewport setting by initial x axis
|
||||
if (initialIdx > pointDataSet.length - 1) {
|
||||
initialIdx = 0;
|
||||
}
|
||||
barChart.moveViewToX(initialIdx - 0.7f);
|
||||
//chart viewport range
|
||||
barChart.setVisibleXRangeMaximum(4f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChartSingleTapped(MotionEvent me) {
|
||||
float tappedX = me.getX();
|
||||
float tappedY = me.getY();
|
||||
MPPointD point = barChart.getTransformer(YAxis.AxisDependency.LEFT).getValuesByTouchPoint(tappedX, tappedY);
|
||||
if (point.y < 0) {
|
||||
int idx = (int) Math.round(point.x);
|
||||
int xLabelSize = barChart.getXAxis().getLabelCount();
|
||||
if (idx < 0 || idx >= xLabelSize)
|
||||
return;
|
||||
|
||||
GroupPointData pointData = presenter.getPointDataAt(idx);
|
||||
if (pointData != null)
|
||||
goToDailyPointsChart(pointData);
|
||||
}
|
||||
}
|
||||
|
||||
private void goToDailyPointsChart(GroupPointData groupPointData) {
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString("GroupPoint", groupPointData.groupPoint);
|
||||
|
||||
String programCode = getArguments() != null ? getArguments().getString(MEMBERSHIP_PROGRAM_CODE) : "";
|
||||
bundle.putString(MEMBERSHIP_PROGRAM_CODE, programCode);
|
||||
|
||||
String programName = getArguments() != null ? getArguments().getString(MEMBERSHIP_PROGRAM_NAME) : "";
|
||||
bundle.putString(MEMBERSHIP_PROGRAM_NAME, programName);
|
||||
|
||||
String programStartDate = getArguments() != null ? getArguments().getString(PROGRAM_START_DATE) : "";
|
||||
bundle.putString(PROGRAM_START_DATE, programStartDate);
|
||||
|
||||
String currentMonthPoints = getArguments() != null ? getArguments().getString(CURRENT_MONTH_POINT) : "";
|
||||
bundle.putString(CURRENT_MONTH_POINT, currentMonthPoints);
|
||||
|
||||
String preMonthPoint = getArguments() != null ? getArguments().getString(PRE_MONTH_POINT) : "";
|
||||
bundle.putString(PRE_MONTH_POINT, preMonthPoint);
|
||||
|
||||
//fragment transaction
|
||||
DailyPointsChartView dailyPointsChart = new DailyPointsChartView();
|
||||
dailyPointsChart.setArguments(bundle);
|
||||
|
||||
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
|
||||
transaction.setCustomAnimations(R.anim.activity_open_translate, R.anim.activity_close_scale, R.anim.activity_open_scale, R.anim.activity_close_translate);
|
||||
transaction.replace(R.id.content_frame, dailyPointsChart);
|
||||
transaction.addToBackStack(null);
|
||||
transaction.commit();
|
||||
}
|
||||
|
||||
//below chart listener implementation not used for now
|
||||
@Override
|
||||
public void onChartGestureStart(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {
|
||||
//not used for now
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChartGestureEnd(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {
|
||||
//this event handler not used for now
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChartLongPressed(MotionEvent me) {
|
||||
//this event handler not used for now
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChartDoubleTapped(MotionEvent me) {
|
||||
//this event handler not used for now
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChartFling(MotionEvent me1, MotionEvent me2, float velocityX, float velocityY) {
|
||||
//this event handler not used for now
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChartScale(MotionEvent me, float scaleX, float scaleY) {
|
||||
//this event handler not used for now
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChartTranslate(MotionEvent me, float dX, float dY) {
|
||||
//this event handler not used for now
|
||||
}
|
||||
|
||||
public void setCurrentMonthPoint() {
|
||||
double dpoinmonth = Double.parseDouble(getArguments() != null ? getArguments().getString(CURRENT_MONTH_POINT) : "");
|
||||
String poinMonth = Tool.formatToCurrency(dpoinmonth);
|
||||
currentMonthPoint.setText(poinMonth);
|
||||
|
||||
Integer pointmonthnow = Integer.parseInt(getArguments() != null ? getArguments().getString(CURRENT_MONTH_POINT) : "");
|
||||
Integer pointmonthbefore = Integer.parseInt(getArguments() != null ? getArguments().getString(PRE_MONTH_POINT) : "");
|
||||
int difference = pointmonthnow - pointmonthbefore;
|
||||
|
||||
if (difference < 0) {
|
||||
preCurrentMonthPoint.setText("" + difference);
|
||||
preCurrentMonthPoint.setTextColor(Color.parseColor("#FF0000"));
|
||||
} else if (difference > 0) {
|
||||
preCurrentMonthPoint.setText("+" + difference);
|
||||
preCurrentMonthPoint.setTextColor(Color.parseColor("#008000"));
|
||||
} else {
|
||||
preCurrentMonthPoint.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
public void setDailyAveragePeriod() {
|
||||
Integer pointPeriod = Integer.parseInt(getArguments() != null ? getArguments().getString(GRACE_POINT_NOW) : "");
|
||||
|
||||
DateFormat inputFormatter1 = new SimpleDateFormat("dd-MM-yyyy");
|
||||
DateFormat outputFormatter1 = new SimpleDateFormat("MM/dd/yyyy");
|
||||
|
||||
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
Date now = calendar.getTime();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH);
|
||||
String waktusekarang = sdf.format(now);
|
||||
|
||||
Date date1 = null;
|
||||
try {
|
||||
date1 = inputFormatter1.parse(getArguments() != null ? getArguments().getString(PROGRAM_START_DATE) : "");
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
String output1 = outputFormatter1.format(date1); //
|
||||
|
||||
Date firstDate = null;
|
||||
try {
|
||||
firstDate = sdf.parse(output1);
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
Date secondDate = null;
|
||||
try {
|
||||
secondDate = sdf.parse(waktusekarang);
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
long diffInMillies = Math.abs(secondDate.getTime() - firstDate.getTime());
|
||||
long diff = TimeUnit.DAYS.convert(diffInMillies, TimeUnit.MILLISECONDS);
|
||||
int days = (int) diff;
|
||||
|
||||
int dailyAvgPeriodPoint;
|
||||
if (days <= 1) {
|
||||
dailyAvgPeriodPoint = 0;
|
||||
} else {
|
||||
dailyAvgPeriodPoint = pointPeriod / days;
|
||||
}
|
||||
|
||||
String poinharirata = Tool.formatToCurrency(dailyAvgPeriodPoint);
|
||||
dailyAveragePeriod.setText(poinharirata);
|
||||
}
|
||||
|
||||
public boolean isCompetitionMonthEqualsCurrentMonth(){
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
Date compeDate = null;
|
||||
Date currentDate = calendar.getTime();
|
||||
|
||||
DateFormat inputFormatter1 = new SimpleDateFormat("dd-MM-yyyy");
|
||||
SimpleDateFormat simpleMonth = new SimpleDateFormat("M");
|
||||
|
||||
try {
|
||||
compeDate = inputFormatter1.parse(getArguments() != null ? getArguments().getString(PROGRAM_START_DATE) : "");
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
String outputMonthCompe = simpleMonth.format(compeDate);
|
||||
String outputCurrMonth = simpleMonth.format(currentDate);
|
||||
|
||||
return outputCurrMonth.equalsIgnoreCase(outputMonthCompe);
|
||||
}
|
||||
|
||||
public void setDailyAverageMonth() {
|
||||
Integer pointmonthnow = Integer.parseInt(getArguments() != null ? getArguments().getString(CURRENT_MONTH_POINT) : "");
|
||||
Integer pointmonthbefore = Integer.parseInt(getArguments() != null ? getArguments().getString(PRE_MONTH_POINT) : "");
|
||||
|
||||
Date compeDate = null;
|
||||
|
||||
DateFormat inputFormatter1 = new SimpleDateFormat("dd-MM-yyyy");
|
||||
SimpleDateFormat simpleDate1 = new SimpleDateFormat("d");
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
Date now = calendar.getTime();
|
||||
|
||||
String totaltanggal = simpleDate1.format(now);
|
||||
Integer tanggalHariIni = Integer.parseInt(totaltanggal);
|
||||
|
||||
try {
|
||||
compeDate = inputFormatter1.parse(getArguments() != null ? getArguments().getString(PROGRAM_START_DATE) : "");
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
String tglCompe = simpleDate1.format(compeDate);
|
||||
Integer tanggalKompe = Integer.parseInt(tglCompe);
|
||||
|
||||
Integer kalender8total;
|
||||
if ((tanggalHariIni - 1) == 0) {
|
||||
kalender8total = 0;
|
||||
} else {
|
||||
if (isCompetitionMonthEqualsCurrentMonth() && tanggalHariIni.equals(tanggalKompe)) {
|
||||
kalender8total = 0;
|
||||
}
|
||||
else if (isCompetitionMonthEqualsCurrentMonth()){
|
||||
kalender8total = pointmonthnow / (tanggalHariIni - tanggalKompe);
|
||||
} else {
|
||||
kalender8total = pointmonthnow / (tanggalHariIni - 1);
|
||||
}
|
||||
}
|
||||
|
||||
String poinhari = Tool.formatToCurrency(kalender8total);
|
||||
|
||||
int kalender8totalbefore;
|
||||
if ((tanggalHariIni - 1) == 0) {
|
||||
kalender8totalbefore = 0;
|
||||
} else {
|
||||
if (isCompetitionMonthEqualsCurrentMonth() && tanggalHariIni.equals(tanggalKompe)) {
|
||||
kalender8totalbefore = 0;
|
||||
}
|
||||
else if (isCompetitionMonthEqualsCurrentMonth()) {
|
||||
kalender8totalbefore = pointmonthbefore / (tanggalHariIni - tanggalKompe);
|
||||
} else {
|
||||
kalender8totalbefore = pointmonthbefore / (tanggalHariIni - 1);
|
||||
}
|
||||
}
|
||||
|
||||
String poin8beforestring = Tool.formatToCurrency(kalender8totalbefore);
|
||||
|
||||
if (kalender8total < kalender8totalbefore) {
|
||||
dailyAverageMonth.setText(poinhari);
|
||||
preDailyAverageMonth.setText(poin8beforestring);
|
||||
arrowDailyAverageMonth.setImageDrawable(getContext().getResources().getDrawable(R.drawable.arrowdownred));
|
||||
} else if (kalender8total > kalender8totalbefore && kalender8totalbefore != 0) {
|
||||
dailyAverageMonth.setText(poinhari);
|
||||
preDailyAverageMonth.setText(poin8beforestring);
|
||||
arrowDailyAverageMonth.setImageDrawable(getContext().getResources().getDrawable(R.drawable.arrowupgreen));
|
||||
} else {
|
||||
dailyAverageMonth.setText(poinhari);
|
||||
dailyAverageMonth.setVisibility(View.VISIBLE);
|
||||
preDailyAverageMonth.setVisibility(View.INVISIBLE);
|
||||
arrowDailyAverageMonth.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
public void setTotalPointsV() {
|
||||
|
||||
final double d = Double.parseDouble(getArguments() != null ? getArguments().getString(GRACE_POINT_NOW) : "");
|
||||
String pointPeriod = Tool.formatToCurrency(d);
|
||||
totalPointsV.setText(pointPeriod);
|
||||
|
||||
Integer gracepointnow = Integer.parseInt(getArguments() != null ? getArguments().getString(GRACE_POINT_NOW) : "");
|
||||
Integer gracepointbefore = Integer.parseInt(getArguments() != null ? getArguments().getString("GracePointBefore") : "");
|
||||
|
||||
String range;
|
||||
if (gracepointnow < gracepointbefore) {
|
||||
range = String.valueOf(gracepointbefore - gracepointnow);
|
||||
preTotalPoints.setText("-" + range);
|
||||
preTotalPoints.setTextColor(Color.parseColor("#FF0000"));
|
||||
} else if (gracepointnow > gracepointbefore) {
|
||||
range = String.valueOf(gracepointnow - gracepointbefore);
|
||||
preTotalPoints.setText("+" + range);
|
||||
preTotalPoints.setTextColor(Color.parseColor("#008000"));
|
||||
} else {
|
||||
preTotalPoints.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean checkUserHelpAvailability() {
|
||||
List<UserHelpViewDummy> userHelpDummyViews = Global.userHelpDummyGuide.get(DummyMonthlyPointView.class.getSimpleName());
|
||||
return Global.ENABLE_USER_HELP && userHelpDummyViews != null;
|
||||
}
|
||||
|
||||
private void initializeChartColor(Context mContext){
|
||||
pointDetailColors = new int[] {
|
||||
ContextCompat.getColor(mContext, R.color.graphColor1),
|
||||
ContextCompat.getColor(mContext, R.color.graphColor2),
|
||||
ContextCompat.getColor(mContext, R.color.graphColor3),
|
||||
ContextCompat.getColor(mContext, R.color.graphColor4),
|
||||
ContextCompat.getColor(mContext, R.color.graphColor5)
|
||||
};
|
||||
|
||||
rankColors = new int[] {
|
||||
ContextCompat.getColor(mContext, R.color.rankColor1),
|
||||
ContextCompat.getColor(mContext, R.color.rankColor2),
|
||||
ContextCompat.getColor(mContext, R.color.rankColor3),
|
||||
ContextCompat.getColor(mContext, R.color.rankColor4)
|
||||
};
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
/build
|
|
@ -0,0 +1,131 @@
|
|||
package com.adins.mss.svy.assignment;
|
||||
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.Context;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Bundle;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.fragment.app.FragmentTransaction;
|
||||
|
||||
import com.adins.mss.base.GlobalData;
|
||||
import com.adins.mss.base.NewMainActivity;
|
||||
import com.adins.mss.base.R;
|
||||
import com.adins.mss.base.crashlytics.FireCrash;
|
||||
import com.adins.mss.base.mainmenu.MainMenuActivity;
|
||||
import com.adins.mss.base.util.GsonHelper;
|
||||
import com.adins.mss.base.util.Utility;
|
||||
import com.adins.mss.constant.Global;
|
||||
import com.adins.mss.foundation.dialog.NiftyDialogBuilder;
|
||||
import com.adins.mss.foundation.formatter.Tool;
|
||||
import com.adins.mss.foundation.http.HttpConnectionResult;
|
||||
import com.adins.mss.foundation.http.HttpCryptedConnection;
|
||||
import com.adins.mss.svy.reassignment.JsonRequestCheckOrder;
|
||||
import com.adins.mss.svy.reassignment.JsonResponseServer;
|
||||
import com.google.firebase.perf.FirebasePerformance;
|
||||
import com.google.firebase.perf.metrics.HttpMetric;
|
||||
|
||||
public class OrderAssignmentTask extends AsyncTask<Void, Void, JsonResponseServer> {
|
||||
private ProgressDialog progressDialog;
|
||||
private Context context;
|
||||
private String messageWait;
|
||||
private String messageEmpty;
|
||||
private String errMessage = null;
|
||||
private FragmentActivity fragmentActivity;
|
||||
private int contentFrame;
|
||||
public OrderAssignmentTask(FragmentActivity fragmentActivity, String messageWait, String messageEmpty,int contentFrame){
|
||||
this.context=fragmentActivity;
|
||||
this.fragmentActivity = fragmentActivity;
|
||||
this.messageWait = messageWait;
|
||||
this.messageEmpty = messageEmpty;
|
||||
this.contentFrame = contentFrame;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPreExecute() {
|
||||
progressDialog = ProgressDialog.show(context, "", messageWait, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JsonResponseServer doInBackground(Void... params) {
|
||||
String resp = null;
|
||||
JsonResponseServer result = null;
|
||||
if(Tool.isInternetconnected(context)){
|
||||
JsonRequestCheckOrder requestCheckOrder = new JsonRequestCheckOrder();
|
||||
requestCheckOrder.setAudit(GlobalData.getSharedGlobalData().getAuditData());
|
||||
requestCheckOrder.setFlag(Global.FLAG_FOR_ORDERASSIGNMENT);
|
||||
String json = GsonHelper.toJson(requestCheckOrder);
|
||||
String url = GlobalData.getSharedGlobalData().getURL_GET_LIST_ASSIGNMENT();
|
||||
boolean encrypt = GlobalData.getSharedGlobalData().isEncrypt();
|
||||
boolean decrypt = GlobalData.getSharedGlobalData().isDecrypt();
|
||||
HttpCryptedConnection httpConn = new HttpCryptedConnection(fragmentActivity, encrypt, decrypt);
|
||||
HttpConnectionResult serverResult = null;
|
||||
|
||||
//Firebase Performance Trace HTTP Request
|
||||
HttpMetric networkMetric =
|
||||
FirebasePerformance.getInstance().newHttpMetric(url, FirebasePerformance.HttpMethod.POST);
|
||||
Utility.metricStart(networkMetric, json);
|
||||
|
||||
try {
|
||||
serverResult = httpConn.requestToServer(url, json, Global.DEFAULTCONNECTIONTIMEOUT);
|
||||
Utility.metricStop(networkMetric, serverResult);
|
||||
} catch (Exception e) {
|
||||
FireCrash.log(e);
|
||||
e.printStackTrace();
|
||||
errMessage=e.getMessage();
|
||||
}
|
||||
|
||||
resp = serverResult.getResult();
|
||||
|
||||
try {
|
||||
result = GsonHelper.fromJson(resp, JsonResponseServer.class);
|
||||
if(result.getStatus().getCode()!=0){
|
||||
errMessage= result.getStatus().getMessage();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
FireCrash.log(e);
|
||||
errMessage = context.getString(R.string.jsonParseFailed);
|
||||
}
|
||||
}else{
|
||||
errMessage = context.getString(R.string.no_internet_connection);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(JsonResponseServer result) {
|
||||
if (progressDialog.isShowing()){
|
||||
try {
|
||||
progressDialog.dismiss();
|
||||
} catch (Exception e) {
|
||||
FireCrash.log(e);
|
||||
}
|
||||
}
|
||||
if (GlobalData.isRequireRelogin()) {
|
||||
|
||||
} else if (errMessage != null) {
|
||||
NiftyDialogBuilder dialogBuilder = NiftyDialogBuilder.getInstance(fragmentActivity);
|
||||
dialogBuilder.withTitle(fragmentActivity.getString(R.string.error_capital))
|
||||
.withMessage(errMessage)
|
||||
.show();
|
||||
}
|
||||
else if (result == null){
|
||||
NiftyDialogBuilder dialogBuilder = NiftyDialogBuilder.getInstance(fragmentActivity);
|
||||
dialogBuilder.withTitle(fragmentActivity.getString(R.string.info_capital))
|
||||
.withMessage(messageEmpty)
|
||||
.show();
|
||||
}
|
||||
else{
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putSerializable("resultJson",result);
|
||||
Fragment fragment = new OrderAssignmentActivity();
|
||||
fragment.setArguments(bundle);
|
||||
|
||||
FragmentTransaction transaction = NewMainActivity.fragmentManager.beginTransaction();
|
||||
transaction.setCustomAnimations(R.anim.activity_open_translate,R.anim.activity_close_scale,R.anim.activity_open_scale,R.anim.activity_close_translate);
|
||||
transaction.replace(R.id.content_frame, fragment);
|
||||
transaction.addToBackStack(null);
|
||||
transaction.commit();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
package com.adins.mss.foundation.dialog.gitonway.lib;
|
||||
|
||||
import android.graphics.ColorFilter;
|
||||
import android.graphics.ColorMatrixColorFilter;
|
||||
|
||||
// http://stackoverflow.com/a/11171509/317862
|
||||
public class ColorUtils {
|
||||
|
||||
public static ColorFilter getColorFilter(int color) {
|
||||
ColorMatrixColorFilter colorFilter;
|
||||
int red = (color & 0xFF0000) / 0xFFFF;
|
||||
int green = (color & 0xFF00) / 0xFF;
|
||||
int blue = color & 0xFF;
|
||||
|
||||
float[] matrix = {0, 0, 0, 0, red
|
||||
, 0, 0, 0, 0, green
|
||||
, 0, 0, 0, 0, blue
|
||||
, 0, 0, 0, 1, 0};
|
||||
|
||||
colorFilter = new ColorMatrixColorFilter(matrix);
|
||||
|
||||
return colorFilter;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,83 @@
|
|||
package com.adins.mss.foundation.db.dataaccess;
|
||||
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
|
||||
import com.adins.mss.dao.DaoSession;
|
||||
import com.adins.mss.foundation.db.DaoOpenHelper;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
public class TableDataAccess {
|
||||
|
||||
public static JSONArray getDataByQuery(Context context, String query) {
|
||||
DaoSession daoSession = DaoOpenHelper.getDaoSession(context);
|
||||
String querySelect = null;
|
||||
Cursor cursor;
|
||||
|
||||
String[] queryStatement = query.split(";");
|
||||
if (queryStatement.length > 0) {
|
||||
for (String statement : queryStatement) {
|
||||
if (statement.contains("INSERT") || statement.contains("UPDATE") || statement.contains("DELETE")) {
|
||||
daoSession.getDatabase().execSQL(statement);
|
||||
JSONObject data = new JSONObject();
|
||||
try {
|
||||
data.put("Message", "SUCCESS EXECUTE QUERY");
|
||||
JSONArray dataAll = new JSONArray();
|
||||
dataAll.put(data);
|
||||
return dataAll;
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else if (statement.contains("SELECT")) {
|
||||
querySelect = statement;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (query.contains("INSERT") || query.contains("UPDATE") || query.contains("DELETE")) {
|
||||
daoSession.getDatabase().execSQL(query);
|
||||
} else if (query.contains("SELECT")) {
|
||||
querySelect = query;
|
||||
}
|
||||
}
|
||||
|
||||
if (null != querySelect) {
|
||||
cursor = daoSession.getDatabase().rawQuery(querySelect, null);
|
||||
|
||||
JSONArray dataAll = new JSONArray();
|
||||
try {
|
||||
if (cursor.moveToFirst()) {
|
||||
int totalColumn = cursor.getColumnCount();
|
||||
do {
|
||||
JSONObject data = new JSONObject();
|
||||
for (int i = 0; i < totalColumn; i++) {
|
||||
if (null != cursor.getColumnName(i)) {
|
||||
if (1 == cursor.getType(i)) {
|
||||
data.put(cursor.getColumnName(i), cursor.getInt(i));
|
||||
} else if (2 == cursor.getType(i)) {
|
||||
data.put(cursor.getColumnName(i), cursor.getFloat(i));
|
||||
} else if (3 == cursor.getType(i)) {
|
||||
data.put(cursor.getColumnName(i), cursor.getString(i));
|
||||
} else if (4 == cursor.getType(i)) {
|
||||
data.put(cursor.getColumnName(i), cursor.getBlob(i));
|
||||
} else {
|
||||
data.put(cursor.getColumnName(i), "");
|
||||
}
|
||||
}
|
||||
}
|
||||
dataAll.put(data);
|
||||
} while (cursor.moveToNext());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
cursor.close();
|
||||
}
|
||||
return dataAll;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="30dp"
|
||||
android:height="30dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="@color/fontColor"
|
||||
android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
|
||||
</vector>
|
|
@ -0,0 +1,24 @@
|
|||
<?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="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="10dp"
|
||||
android:paddingLeft="25dp"
|
||||
android:paddingTop="10dp"
|
||||
android:background="@drawable/spinner_background">
|
||||
|
||||
|
||||
<TextView
|
||||
android:id="@+id/txtOrderList"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="10dp"
|
||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||
android:textColor="@color/tv_white"
|
||||
android:textSize="17sp"
|
||||
android:textStyle="bold"/>
|
||||
|
||||
|
||||
</LinearLayout>
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue