Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.joythis.android.distancebetweendates;
- public class AmCalendar {
- public int distanceInDaysTo(
- AmCalendar pSomeOtherCalendar
- ){
- return 0;
- }//distanceInDaysTo
- public static boolean validYear(int pY){
- return pY>=1;
- }//validYear
- public static boolean validMonth(int pM){
- return pM>=1 && pM<=12;
- }//validMonth
- public static boolean validDay(
- int pY,
- int pM,
- int pD
- ){
- return pD>=1 && pD<=AmCalendar.daysInMonth(pY, pM);
- }//validDay
- public final static int IMPOSSIBLE_MONTH = -1;
- public static int daysInMonth (
- int pY,
- int pM
- ){
- switch(pM){
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10:
- case 12:
- return 31;
- case 4:
- case 6:
- case 9:
- case 11:
- return 30;
- case 2:
- return AmCalendar.leapYear(pY) ? 29 : 28;
- default:
- return IMPOSSIBLE_MONTH;
- }//switch
- }//daysInMonth
- public static boolean leapYear(
- int pY
- ){
- boolean bM400 = pY%400 == 0;
- boolean bM100 = pY%100 == 0;
- boolean bM4 = pY%4 == 0;
- boolean bCase1 = bM400; //2000
- boolean bCase2 = bM4 && !bM100; //1996
- return bCase1 || bCase2;
- }//leapYear
- }//AmCalendar
- //**
- package com.joythis.android.distancebetweendates;
- import androidx.appcompat.app.AppCompatActivity;
- import android.content.Context;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.ArrayAdapter;
- import android.widget.Button;
- import android.widget.ListView;
- import android.widget.NumberPicker;
- import java.util.ArrayList;
- import java.util.Calendar;
- public class DateInputActivity extends AppCompatActivity {
- Context mContext;
- NumberPicker mNpYear, mNpMonth, mNpDay;
- Button mBtnConfirmDate;
- ListView mLvFeedback;
- ArrayList<String> mAlUserMsgs;
- ArrayAdapter<String> mAd;
- Button.OnClickListener mButtonClickHandler =
- new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- actionSendDateToOtherActivity();
- }//onClick
- };//mButtonClickHandler
- NumberPicker.OnValueChangeListener mNumberPickerChangeHandler =
- new NumberPicker.OnValueChangeListener() {
- @Override
- public void onValueChange(
- NumberPicker picker,
- int oldVal,
- int newVal
- ){
- int y = mNpYear.getValue();
- int m = mNpMonth.getValue();
- int d = mNpDay.getValue();
- boolean bValidDate = AmCalendar.validDay(y, m, d);
- //some of the code that follows became
- //unnecessary, because of this line
- mNpDay.setMaxValue(
- AmCalendar.daysInMonth(y,m)
- );
- if (!bValidDate){
- //%1$d-%2$d-%3$d invalid date!
- String strMsg =
- getResources().getString(
- R.string.strInvalidDate,
- y,m,d
- );
- mAlUserMsgs.add(0, strMsg);
- mAd.notifyDataSetChanged();
- //TODO
- int iMaxDaysForSelectedYM =
- AmCalendar.daysInMonth(y, m);
- /*
- <string name="strInvalidDate">%1$d-%2$d-%3$d invalid date!</string>
- <string name="strDayFixed">Day fixed from %1$d to %2$d.</string>
- */
- mNpDay.setValue(iMaxDaysForSelectedYM);
- mNpDay.setMaxValue(iMaxDaysForSelectedYM);
- strMsg = getString(
- R.string.strDayFixed,
- d,
- iMaxDaysForSelectedYM
- );
- mAlUserMsgs.add(0, strMsg);
- mAd.notifyDataSetChanged();
- }//if
- }//onValueChange
- };//mNumberChangeHandler
- /*
- single purpose:
- - exemplify how to navigate from this activity to A2
- */
- public static String KEY_HELLO = "KEY_HELLO";
- public static String KEY_THE_USER_DATE = "KEY_THE_USER_DATE";
- public static String KEY_YEAR = "KEY_YEAR";
- public static String KEY_MONTH = "KEY_MONTH";
- public static String KEY_DAY = "KEY_DAY";
- public static String KEY_BUNDLE = "KEY_BUNDLE";
- void actionSendDateToOtherActivity(){
- Intent intentForSimpleNavigationToA2 = new Intent(
- //this,
- DateInputActivity.this, //source intance
- A2.class//class of destination
- );
- //send "hello" to the other Activity?
- String strToSend = "hello";
- intentForSimpleNavigationToA2.putExtra(
- KEY_HELLO,
- strToSend
- );
- int y, m, d;
- y=mNpYear.getValue();
- m=mNpMonth.getValue();
- d=mNpDay.getValue();
- //<string name="strYMD">%1$d-%2$d-%3$d</string>
- String strTheUserDate =
- getString(
- R.string.strYMD,
- y,
- m,
- d
- );
- intentForSimpleNavigationToA2.putExtra(
- KEY_THE_USER_DATE,
- strTheUserDate
- );
- intentForSimpleNavigationToA2.putExtra(
- KEY_YEAR, y
- );
- intentForSimpleNavigationToA2.putExtra(
- KEY_MONTH,
- m
- );
- intentForSimpleNavigationToA2.putExtra(
- KEY_DAY,
- d
- );
- //4th and final variant of sending data to another Activity
- Bundle b = new Bundle();
- b.putInt(KEY_YEAR, y);
- b.putInt(KEY_MONTH, m);
- b.putInt(KEY_DAY, d);
- intentForSimpleNavigationToA2.putExtra(
- KEY_BUNDLE,
- b
- );
- //we are <del>NOT</del> sending the user selected date
- startActivity(
- intentForSimpleNavigationToA2
- );
- }//actionSendDateToOtherActivity
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.date_input_cl);
- init();
- }//onCreate
- void init(){
- mContext = DateInputActivity.this;
- mNpYear = findViewById(R.id.idNpYear);
- mNpMonth = findViewById(R.id.idNpMonth);
- mNpDay = findViewById(R.id.idNpDay);
- mBtnConfirmDate = findViewById(R.id.idBtnConfirmDate);
- mLvFeedback = findViewById(R.id.idLvFeedback);
- NumberPicker[] aNpYMD = {
- mNpYear, mNpMonth, mNpDay
- };
- for (NumberPicker np : aNpYMD)
- np.setOnValueChangedListener(mNumberPickerChangeHandler);
- //TODO
- Calendar cal = Calendar.getInstance();
- mNpYear.setMinValue(1);
- mNpYear.setMaxValue(9999);
- mNpYear.setValue(
- //2020
- /*
- Calendar.getInstance().get(
- Calendar.YEAR
- )
- */
- cal.get(Calendar.YEAR)
- );
- mNpMonth.setMinValue(1);
- mNpMonth.setMaxValue(12);
- mNpMonth.setValue(
- //11
- /*
- Calendar.getInstance().get(
- Calendar.MONTH
- )
- */
- cal.get(
- Calendar.MONTH
- )+1
- );
- mNpDay.setMinValue(1);
- mNpDay.setMaxValue(31);
- mNpDay.setValue(
- //10
- cal.get(Calendar.DAY_OF_MONTH)
- );
- mAlUserMsgs = new ArrayList<>();
- mAd = new ArrayAdapter<>(
- mContext,
- android.R.layout.simple_list_item_1,
- mAlUserMsgs
- );
- mLvFeedback.setAdapter(mAd);
- mBtnConfirmDate.setOnClickListener(
- mButtonClickHandler
- );package com.joythis.android.distancebetweendates;
- import androidx.appcompat.app.AppCompatActivity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.widget.TextView;
- import java.util.Calendar;
- import java.util.Date;
- public class A2 extends AppCompatActivity {
- TextView mTv;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_a2);
- init();
- }//onCreate
- void init(){
- mTv = findViewById(R.id.idTv);
- receiveAndShowSentData();
- }//init
- void receiveAndShowSentData(){
- //pattern to receive data sent from another activity?
- Intent whoCalledMe = getIntent();
- if (whoCalledMe!=null){
- String strThisWasSentToMe =
- whoCalledMe.getStringExtra(
- DateInputActivity.KEY_HELLO
- );
- String strTheUserDate =
- whoCalledMe.getStringExtra(
- DateInputActivity.KEY_THE_USER_DATE
- );
- int y, m, d;
- y = whoCalledMe.getIntExtra(
- DateInputActivity.KEY_YEAR,
- Calendar.getInstance().get(Calendar.YEAR) //default value, in case there is no value in the key
- );
- m = whoCalledMe.getIntExtra(
- DateInputActivity.KEY_MONTH,
- Calendar.getInstance().get(Calendar.MONTH) //default value, in case there is no value in the key
- );
- d = whoCalledMe.getIntExtra(
- DateInputActivity.KEY_DAY,
- Calendar.getInstance().get(Calendar.DAY_OF_MONTH) //default value
- );
- //4th alt
- Bundle b = whoCalledMe.getBundleExtra(
- DateInputActivity.KEY_BUNDLE
- );
- int yy =
- b.containsKey(DateInputActivity.KEY_YEAR)?
- b.getInt(DateInputActivity.KEY_YEAR)
- :
- Calendar.getInstance().get(Calendar.YEAR);
- int mm =
- b.containsKey(DateInputActivity.KEY_MONTH)?
- b.getInt(DateInputActivity.KEY_MONTH)
- :
- Calendar.getInstance().get(Calendar.MONTH);
- int dd =
- b.containsKey(DateInputActivity.KEY_DAY)?
- b.getInt(DateInputActivity.KEY_DAY)
- :
- Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
- mTv.setText(
- strThisWasSentToMe+
- "\n"+
- strTheUserDate+
- "\n"+
- "y="+String.valueOf(y)+
- "\n"+
- "m="+String.valueOf(m)+
- "\n"+
- "d="+String.valueOf(d)+
- "\n"+
- "yy="+String.valueOf(yy)+
- "\n"+
- "mm="+String.valueOf(mm)+
- "\n"+
- "dd="+String.valueOf(dd)
- );
- }//if
- }//receiveAndShowSentData
- }//A2
- }//init
- }
- //*
Advertisement
Add Comment
Please, Sign In to add comment