am_dot_com

DDM20201110

Nov 10th, 2020 (edited)
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.14 KB | None | 0 0
  1. package com.joythis.android.distancebetweendates;
  2.  
  3. public class AmCalendar {
  4.     public int distanceInDaysTo(
  5.         AmCalendar pSomeOtherCalendar
  6.     ){
  7.         return 0;
  8.     }//distanceInDaysTo
  9.  
  10.     public static boolean validYear(int pY){
  11.         return pY>=1;
  12.     }//validYear
  13.  
  14.     public static boolean validMonth(int pM){
  15.         return pM>=1 && pM<=12;
  16.     }//validMonth
  17.  
  18.     public static boolean validDay(
  19.         int pY,
  20.         int pM,
  21.         int pD
  22.     ){
  23.         return pD>=1 && pD<=AmCalendar.daysInMonth(pY, pM);
  24.     }//validDay
  25.  
  26.     public final static int IMPOSSIBLE_MONTH = -1;
  27.     public static int daysInMonth (
  28.         int pY,
  29.         int pM
  30.     ){
  31.         switch(pM){
  32.             case 1:
  33.             case 3:
  34.             case 5:
  35.             case 7:
  36.             case 8:
  37.             case 10:
  38.             case 12:
  39.                 return 31;
  40.             case 4:
  41.             case 6:
  42.             case 9:
  43.             case 11:
  44.                 return 30;
  45.             case 2:
  46.                 return AmCalendar.leapYear(pY) ? 29 : 28;
  47.             default:
  48.                 return IMPOSSIBLE_MONTH;
  49.         }//switch
  50.     }//daysInMonth
  51.  
  52.     public static boolean leapYear(
  53.         int pY
  54.     ){
  55.         boolean bM400 = pY%400 == 0;
  56.         boolean bM100 = pY%100 == 0;
  57.         boolean bM4 = pY%4 == 0;
  58.  
  59.         boolean bCase1 = bM400; //2000
  60.         boolean bCase2 = bM4 && !bM100; //1996
  61.  
  62.         return bCase1 || bCase2;
  63.     }//leapYear
  64. }//AmCalendar
  65.  
  66. //**
  67. package com.joythis.android.distancebetweendates;
  68.  
  69. import androidx.appcompat.app.AppCompatActivity;
  70.  
  71. import android.content.Context;
  72. import android.content.Intent;
  73. import android.os.Bundle;
  74. import android.view.View;
  75. import android.widget.ArrayAdapter;
  76. import android.widget.Button;
  77. import android.widget.ListView;
  78. import android.widget.NumberPicker;
  79.  
  80. import java.util.ArrayList;
  81. import java.util.Calendar;
  82.  
  83. public class DateInputActivity extends AppCompatActivity {
  84.     Context mContext;
  85.  
  86.     NumberPicker mNpYear, mNpMonth, mNpDay;
  87.     Button mBtnConfirmDate;
  88.     ListView mLvFeedback;
  89.  
  90.     ArrayList<String> mAlUserMsgs;
  91.     ArrayAdapter<String> mAd;
  92.  
  93.     Button.OnClickListener mButtonClickHandler =
  94.         new View.OnClickListener() {
  95.             @Override
  96.             public void onClick(View v) {
  97.                 actionSendDateToOtherActivity();
  98.             }//onClick
  99.         };//mButtonClickHandler
  100.  
  101.     NumberPicker.OnValueChangeListener mNumberPickerChangeHandler =
  102.     new NumberPicker.OnValueChangeListener() {
  103.         @Override
  104.         public void onValueChange(
  105.             NumberPicker picker,
  106.             int oldVal,
  107.             int newVal
  108.         ){
  109.             int y = mNpYear.getValue();
  110.             int m = mNpMonth.getValue();
  111.             int d = mNpDay.getValue();
  112.             boolean bValidDate = AmCalendar.validDay(y, m, d);
  113.  
  114.             //some of the code that follows became
  115.             //unnecessary, because of this line
  116.             mNpDay.setMaxValue(
  117.                 AmCalendar.daysInMonth(y,m)
  118.             );
  119.  
  120.             if (!bValidDate){
  121.                 //%1$d-%2$d-%3$d invalid date!
  122.                 String strMsg =
  123.                     getResources().getString(
  124.                         R.string.strInvalidDate,
  125.                         y,m,d
  126.                     );
  127.  
  128.                 mAlUserMsgs.add(0, strMsg);
  129.                 mAd.notifyDataSetChanged();
  130.  
  131.                 //TODO
  132.                 int iMaxDaysForSelectedYM =
  133.                     AmCalendar.daysInMonth(y, m);
  134.  
  135.                 /*
  136. <string name="strInvalidDate">%1$d-%2$d-%3$d invalid date!</string>
  137. <string name="strDayFixed">Day fixed from %1$d to %2$d.</string>
  138.                  */
  139.                 mNpDay.setValue(iMaxDaysForSelectedYM);
  140.                 mNpDay.setMaxValue(iMaxDaysForSelectedYM);
  141.  
  142.                 strMsg = getString(
  143.                     R.string.strDayFixed,
  144.                     d,
  145.                     iMaxDaysForSelectedYM
  146.                 );
  147.                 mAlUserMsgs.add(0, strMsg);
  148.                 mAd.notifyDataSetChanged();
  149.             }//if
  150.         }//onValueChange
  151.     };//mNumberChangeHandler
  152.  
  153.     /*
  154.     single purpose:
  155.     - exemplify how to navigate from this activity to A2
  156.      */
  157.     public static String KEY_HELLO = "KEY_HELLO";
  158.     public static String KEY_THE_USER_DATE = "KEY_THE_USER_DATE";
  159.     public static String KEY_YEAR = "KEY_YEAR";
  160.     public static String KEY_MONTH = "KEY_MONTH";
  161.     public static String KEY_DAY = "KEY_DAY";
  162.     public static String KEY_BUNDLE = "KEY_BUNDLE";
  163.     void actionSendDateToOtherActivity(){
  164.         Intent intentForSimpleNavigationToA2 = new Intent(
  165.             //this,
  166.             DateInputActivity.this, //source intance
  167.             A2.class//class of destination
  168.         );
  169.  
  170.         //send "hello" to the other Activity?
  171.         String strToSend = "hello";
  172.         intentForSimpleNavigationToA2.putExtra(
  173.             KEY_HELLO,
  174.             strToSend
  175.         );
  176.  
  177.         int y, m, d;
  178.         y=mNpYear.getValue();
  179.         m=mNpMonth.getValue();
  180.         d=mNpDay.getValue();
  181.         //<string name="strYMD">%1$d-%2$d-%3$d</string>
  182.         String strTheUserDate =
  183.             getString(
  184.                 R.string.strYMD,
  185.                 y,
  186.                 m,
  187.                 d
  188.             );
  189.         intentForSimpleNavigationToA2.putExtra(
  190.             KEY_THE_USER_DATE,
  191.             strTheUserDate
  192.         );
  193.  
  194.         intentForSimpleNavigationToA2.putExtra(
  195.             KEY_YEAR, y
  196.         );
  197.         intentForSimpleNavigationToA2.putExtra(
  198.             KEY_MONTH,
  199.             m
  200.         );
  201.         intentForSimpleNavigationToA2.putExtra(
  202.             KEY_DAY,
  203.             d
  204.         );
  205.  
  206.         //4th and final variant of sending data to another Activity
  207.         Bundle b = new Bundle();
  208.         b.putInt(KEY_YEAR, y);
  209.         b.putInt(KEY_MONTH, m);
  210.         b.putInt(KEY_DAY, d);
  211.         intentForSimpleNavigationToA2.putExtra(
  212.             KEY_BUNDLE,
  213.             b
  214.         );
  215.  
  216.         //we are <del>NOT</del> sending the user selected date
  217.         startActivity(
  218.             intentForSimpleNavigationToA2
  219.         );
  220.  
  221.  
  222.     }//actionSendDateToOtherActivity
  223.  
  224.     @Override
  225.     protected void onCreate(Bundle savedInstanceState) {
  226.         super.onCreate(savedInstanceState);
  227.         setContentView(R.layout.date_input_cl);
  228.  
  229.         init();
  230.     }//onCreate
  231.  
  232.     void init(){
  233.         mContext = DateInputActivity.this;
  234.  
  235.         mNpYear = findViewById(R.id.idNpYear);
  236.         mNpMonth = findViewById(R.id.idNpMonth);
  237.         mNpDay = findViewById(R.id.idNpDay);
  238.         mBtnConfirmDate = findViewById(R.id.idBtnConfirmDate);
  239.         mLvFeedback = findViewById(R.id.idLvFeedback);
  240.  
  241.         NumberPicker[] aNpYMD = {
  242.             mNpYear, mNpMonth, mNpDay
  243.         };
  244.         for (NumberPicker np : aNpYMD)
  245.             np.setOnValueChangedListener(mNumberPickerChangeHandler);
  246.  
  247.         //TODO
  248.         Calendar cal = Calendar.getInstance();
  249.         mNpYear.setMinValue(1);
  250.         mNpYear.setMaxValue(9999);
  251.         mNpYear.setValue(
  252.             //2020
  253.             /*
  254.             Calendar.getInstance().get(
  255.                 Calendar.YEAR
  256.             )
  257.              */
  258.             cal.get(Calendar.YEAR)
  259.         );
  260.  
  261.         mNpMonth.setMinValue(1);
  262.         mNpMonth.setMaxValue(12);
  263.         mNpMonth.setValue(
  264.             //11
  265.             /*
  266.             Calendar.getInstance().get(
  267.                 Calendar.MONTH
  268.             )
  269.              */
  270.             cal.get(
  271.                 Calendar.MONTH
  272.             )+1
  273.         );
  274.  
  275.         mNpDay.setMinValue(1);
  276.         mNpDay.setMaxValue(31);
  277.         mNpDay.setValue(
  278.             //10
  279.             cal.get(Calendar.DAY_OF_MONTH)
  280.         );
  281.  
  282.         mAlUserMsgs = new ArrayList<>();
  283.         mAd = new ArrayAdapter<>(
  284.             mContext,
  285.             android.R.layout.simple_list_item_1,
  286.             mAlUserMsgs
  287.         );
  288.         mLvFeedback.setAdapter(mAd);
  289.  
  290.         mBtnConfirmDate.setOnClickListener(
  291.             mButtonClickHandler
  292.         );package com.joythis.android.distancebetweendates;
  293.  
  294. import androidx.appcompat.app.AppCompatActivity;
  295.  
  296. import android.content.Intent;
  297. import android.os.Bundle;
  298. import android.widget.TextView;
  299.  
  300. import java.util.Calendar;
  301. import java.util.Date;
  302.  
  303. public class A2 extends AppCompatActivity {
  304.  
  305.     TextView mTv;
  306.  
  307.     @Override
  308.     protected void onCreate(Bundle savedInstanceState) {
  309.         super.onCreate(savedInstanceState);
  310.         setContentView(R.layout.activity_a2);
  311.  
  312.         init();
  313.     }//onCreate
  314.  
  315.     void init(){
  316.         mTv = findViewById(R.id.idTv);
  317.  
  318.         receiveAndShowSentData();
  319.     }//init
  320.  
  321.     void receiveAndShowSentData(){
  322.         //pattern to receive data sent from another activity?
  323.         Intent whoCalledMe = getIntent();
  324.         if (whoCalledMe!=null){
  325.             String strThisWasSentToMe =
  326.                 whoCalledMe.getStringExtra(
  327.                     DateInputActivity.KEY_HELLO
  328.                 );
  329.  
  330.             String strTheUserDate =
  331.                 whoCalledMe.getStringExtra(
  332.                     DateInputActivity.KEY_THE_USER_DATE
  333.                 );
  334.  
  335.             int y, m, d;
  336.             y = whoCalledMe.getIntExtra(
  337.                     DateInputActivity.KEY_YEAR,
  338.                     Calendar.getInstance().get(Calendar.YEAR) //default value, in case there is no value in the key
  339.                 );
  340.             m = whoCalledMe.getIntExtra(
  341.                     DateInputActivity.KEY_MONTH,
  342.                     Calendar.getInstance().get(Calendar.MONTH) //default value, in case there is no value in the key
  343.             );
  344.             d = whoCalledMe.getIntExtra(
  345.                     DateInputActivity.KEY_DAY,
  346.                     Calendar.getInstance().get(Calendar.DAY_OF_MONTH) //default value
  347.             );
  348.  
  349.             //4th alt
  350.             Bundle b = whoCalledMe.getBundleExtra(
  351.                 DateInputActivity.KEY_BUNDLE
  352.             );
  353.             int yy =
  354.                 b.containsKey(DateInputActivity.KEY_YEAR)?
  355.                 b.getInt(DateInputActivity.KEY_YEAR)
  356.                 :
  357.                 Calendar.getInstance().get(Calendar.YEAR);
  358.             int mm =
  359.                 b.containsKey(DateInputActivity.KEY_MONTH)?
  360.                 b.getInt(DateInputActivity.KEY_MONTH)
  361.                 :
  362.                 Calendar.getInstance().get(Calendar.MONTH);
  363.             int dd =
  364.                 b.containsKey(DateInputActivity.KEY_DAY)?
  365.                 b.getInt(DateInputActivity.KEY_DAY)
  366.                 :
  367.                 Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
  368.  
  369.  
  370.  
  371.             mTv.setText(
  372.                 strThisWasSentToMe+
  373.                 "\n"+
  374.                 strTheUserDate+
  375.                 "\n"+
  376.                 "y="+String.valueOf(y)+
  377.                 "\n"+
  378.                 "m="+String.valueOf(m)+
  379.                 "\n"+
  380.                 "d="+String.valueOf(d)+
  381.  
  382.                 "\n"+
  383.                 "yy="+String.valueOf(yy)+
  384.                 "\n"+
  385.                 "mm="+String.valueOf(mm)+
  386.                 "\n"+
  387.                 "dd="+String.valueOf(dd)
  388.  
  389.             );
  390.         }//if
  391.     }//receiveAndShowSentData
  392. }//A2
  393.     }//init
  394. }
  395. //*
  396.  
Advertisement
Add Comment
Please, Sign In to add comment