App(8)

profileLisa ap
BirthDayWidget.zip

build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.4.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }

gradle.properties

# Project-wide Gradle settings. # IDE (e.g. Android Studio) users: # Gradle settings configured through the IDE *will override* # any settings specified in this file. # For more details on how to configure your build environment visit # http://www.gradle.org/docs/current/userguide/build_environment.html # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. org.gradle.jvmargs=-Xmx1536m # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true

gradlew

#!/usr/bin/env sh ############################################################################## ## ## Gradle start up script for UN*X ## ############################################################################## # Attempt to set APP_HOME # Resolve links: $0 may be a link PRG="$0" # Need this for relative symlinks. while [ -h "$PRG" ] ; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG=`dirname "$PRG"`"/$link" fi done SAVED="`pwd`" cd "`dirname \"$PRG\"`/" >/dev/null APP_HOME="`pwd -P`" cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS="" # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" warn () { echo "$*" } die () { echo echo "$*" echo exit 1 } # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false case "`uname`" in CYGWIN* ) cygwin=true ;; Darwin* ) darwin=true ;; MINGW* ) msys=true ;; NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables JAVACMD="$JAVA_HOME/jre/sh/java" else JAVACMD="$JAVA_HOME/bin/java" fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else JAVACMD="java" which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi # Increase the maximum file descriptors if we can. if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then MAX_FD="$MAX_FD_LIMIT" fi ulimit -n $MAX_FD if [ $? -ne 0 ] ; then warn "Could not set maximum file descriptor limit: $MAX_FD" fi else warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" fi fi # For Darwin, add options to specify how the application appears in the dock if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi # For Cygwin, switch paths to Windows format before running java if $cygwin ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` SEP="" for dir in $ROOTDIRSRAW ; do ROOTDIRS="$ROOTDIRS$SEP$dir" SEP="|" done OURCYGPATTERN="(^($ROOTDIRS))" # Add a user-defined pattern to the cygpath arguments if [ "$GRADLE_CYGPATTERN" != "" ] ; then OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" fi # Now convert the arguments - kludge to limit ourselves to /bin/sh i=0 for arg in "$@" ; do CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` else eval `echo args$i`="\"$arg\"" fi i=$((i+1)) done case $i in (0) set -- ;; (1) set -- "$args0" ;; (2) set -- "$args0" "$args1" ;; (3) set -- "$args0" "$args1" "$args2" ;; (4) set -- "$args0" "$args1" "$args2" "$args3" ;; (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi # Escape application args save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } APP_ARGS=$(save "$@") # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then cd "$(dirname "$0")" fi exec "$JAVACMD" "$@"

gradlew.bat

@if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @rem @rem ########################################################################## @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS= @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if "%ERRORLEVEL%" == "0" goto init echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto init echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo. echo Please set the JAVA_HOME variable in your environment to match the echo location of your Java installation. goto fail :init @rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args :win9xME_args @rem Slurp the command line arguments. set CMD_LINE_ARGS= set _SKIP=2 :win9xME_args_slurp if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% :end @rem End local scope for the variables with windows NT shell if "%ERRORLEVEL%"=="0" goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 exit /b 1 :mainEnd if "%OS%"=="Windows_NT" endlocal :omega

local.properties

## This file is automatically generated by Android Studio. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! # # This file should *NOT* be checked into Version Control Systems, # as it contains information specific to your local configuration. # # Location of the SDK. This is only used by Gradle. # For customization when using a Version Control System, please read the # header note. sdk.dir=C\:\\Users\\hp\\AppData\\Local\\Android\\Sdk

settings.gradle

include ':app'

.gradle/5.1.1/executionHistory/executionHistory.bin

.gradle/5.1.1/executionHistory/executionHistory.lock

.gradle/5.1.1/fileChanges/last-build.bin

.gradle/5.1.1/fileContent/fileContent.lock

.gradle/5.1.1/fileHashes/fileHashes.bin

.gradle/5.1.1/fileHashes/fileHashes.lock

.gradle/5.1.1/fileHashes/resourceHashesCache.bin

.gradle/5.1.1/gc.properties

.gradle/5.1.1/javaCompile/classAnalysis.bin

.gradle/5.1.1/javaCompile/jarAnalysis.bin

.gradle/5.1.1/javaCompile/javaCompile.lock

.gradle/5.1.1/javaCompile/taskHistory.bin

.gradle/buildOutputCleanup/buildOutputCleanup.lock

.gradle/buildOutputCleanup/cache.properties

#Mon Jan 20 12:53:03 EAT 2020 gradle.version=5.1.1

.gradle/buildOutputCleanup/outputFiles.bin

.gradle/vcs-1/gc.properties

.idea/caches/build_file_checksums.ser

.idea/caches/gradle_models.ser

.idea/encodings.xml

.idea/gradle.xml

.idea/libraries/Gradle__android_arch_core_common_1_1_1_jar.xml

.idea/libraries/Gradle__android_arch_core_runtime_1_1_1_aar.xml

.idea/libraries/Gradle__android_arch_lifecycle_common_1_1_1_jar.xml

.idea/libraries/Gradle__android_arch_lifecycle_livedata_1_1_1_aar.xml

.idea/libraries/Gradle__android_arch_lifecycle_livedata_core_1_1_1_aar.xml

.idea/libraries/Gradle__android_arch_lifecycle_runtime_1_1_1_aar.xml

.idea/libraries/Gradle__android_arch_lifecycle_viewmodel_1_1_1_aar.xml

.idea/libraries/Gradle__com_android_support_animated_vector_drawable_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_appcompat_v7_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_asynclayoutinflater_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_cardview_v7_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_collections_28_0_0_jar.xml

.idea/libraries/Gradle__com_android_support_constraint_constraint_layout_1_1_3_aar.xml

.idea/libraries/Gradle__com_android_support_constraint_constraint_layout_solver_1_1_3_jar.xml

.idea/libraries/Gradle__com_android_support_coordinatorlayout_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_cursoradapter_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_customview_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_design_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_documentfile_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_drawerlayout_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_interpolator_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_loader_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_localbroadcastmanager_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_preference_v7_28_0_0_alpha1_aar.xml

.idea/libraries/Gradle__com_android_support_print_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_recyclerview_v7_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_slidingpanelayout_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_support_annotations_28_0_0_jar.xml

.idea/libraries/Gradle__com_android_support_support_compat_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_support_core_ui_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_support_core_utils_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_support_fragment_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_support_media_compat_28_0_0_alpha1_aar.xml

.idea/libraries/Gradle__com_android_support_support_v4_28_0_0_alpha1_aar.xml

.idea/libraries/Gradle__com_android_support_support_vector_drawable_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_swiperefreshlayout_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_test_espresso_espresso_core_3_0_2_aar.xml

.idea/libraries/Gradle__com_android_support_test_espresso_espresso_idling_resource_3_0_2_aar.xml

.idea/libraries/Gradle__com_android_support_test_monitor_1_0_2_aar.xml

.idea/libraries/Gradle__com_android_support_test_runner_1_0_2_aar.xml

.idea/libraries/Gradle__com_android_support_transition_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_versionedparcelable_28_0_0_aar.xml

.idea/libraries/Gradle__com_android_support_viewpager_28_0_0_aar.xml

.idea/libraries/Gradle__com_google_code_findbugs_jsr305_2_0_1_jar.xml

.idea/libraries/Gradle__com_squareup_javawriter_2_1_1_jar.xml

.idea/libraries/Gradle__javax_inject_javax_inject_1_jar.xml

.idea/libraries/Gradle__junit_junit_4_12_jar.xml

.idea/libraries/Gradle__net_sf_kxml_kxml2_2_3_0_jar.xml

.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3_jar.xml

.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3_jar.xml

.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3_jar.xml

.idea/misc.xml

.idea/modules.xml

.idea/runConfigurations.xml

.idea/vcs.xml

.idea/workspace.xml

com.android.support appcompat-v7 28.0.0 Google,Android Repository com.android.support design 28.0.0 Google,Android Repository com.android.support preference-v7 28.0.0 Google,Android Repository com.android.support.constraint constraint-layout 2.0.0-beta4 Google junit junit 4.13 JCenter com.android.support.test runner 1.0.2 Google,Android Repository com.android.support.test.espresso espresso-core 3.0.2 Google,Android Repository 1579516949364 1579513921153 1579513921153 Android API 26 Platform

app/.gitignore

/build

app/app.iml

generateDebugSources

app/build.gradle

apply plugin: 'com.android.application' android { compileSdkVersion 28 defaultConfig { applicationId "com.rkb.birthdaywidget" minSdkVersion 15 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation 'com.android.support:design:28.0.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' implementation 'com.android.support:preference-v7:28.0.0-alpha1' }

app/proguard-rules.pro

# Add project specific ProGuard rules here. # You can control the set of applied configuration files using the # proguardFiles setting in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} # Uncomment this to preserve the line number information for # debugging stack traces. #-keepattributes SourceFile,LineNumberTable # If you keep the line number information, uncomment this to # hide the original source file name. #-renamesourcefileattribute SourceFile

app/src/androidTest/java/com/rkb/birthdaywidget/ExampleInstrumentedTest.java

app/src/androidTest/java/com/rkb/birthdaywidget/ExampleInstrumentedTest.java

package  com . rkb . birthdaywidget ;

import  android . content . Context ;
import  android . support . test . InstrumentationRegistry ;
import  android . support . test . runner . AndroidJUnit4 ;

import  org . junit . Test ;
import  org . junit . runner . RunWith ;

import   static  org . junit . Assert . * ;

/**
 * Instrumented test, which will execute on an Android device.
 *
 *  @see  <a href="http://d.android.com/tools/testing">Testing documentation</a>
 */
@ RunWith ( AndroidJUnit4 . class )
public   class   ExampleInstrumentedTest   {
    @ Test
     public   void  useAppContext ()   {
         // Context of the app under test.
         Context  appContext  =   InstrumentationRegistry . getTargetContext ();

        assertEquals ( "com.rkb.birthdaywidget" ,  appContext . getPackageName ());
     }
}

app/src/main/AndroidManifest.xml

app/src/main/java/com/rkb/birthdaywidget/BDayWidgetModel.java

app/src/main/java/com/rkb/birthdaywidget/BDayWidgetModel.java

package  com . rkb . birthdaywidget ;

import  android . content . Context ;
import  android . content . SharedPreferences ;
import  java . util . Calendar ;
import  java . util . Date ;
import  java . util . concurrent . TimeUnit ;

public   class   BDayWidgetModel   {
     public   Integer  iid ;
     private   String   Bday ;
     private   String  name ;

     public   static   BDayWidgetModel  retrieveModel ( Context  context ,   Integer  widgetid ){
         SharedPreferences  sharedPref  =  context . getSharedPreferences (
                context . getString ( R . string . pref_file_key ),   Context . MODE_PRIVATE );

         String  bday  =  sharedPref . getString ( widgetid . toString () + "_birthday" ,   "01/01/1970" );
         String  name  =  sharedPref . getString ( widgetid . toString ()   +   "_name" ,   "John Doe" );

         return   new   BDayWidgetModel ( widgetid , name , bday );
     }

     public   void  savePreferences ( Context  context ){
         //save iid, name, Bday
         SharedPreferences  sharedPref  =  context . getSharedPreferences (
                context . getString ( R . string . pref_file_key ),   Context . MODE_PRIVATE );

         SharedPreferences . Editor  editor  =  sharedPref . edit ();
        editor . putString ( iid . toString () +   "_birthday" ,   Bday );
        editor . putString ( iid . toString ()   +   "_name" ,  name );
        editor . commit ();
     }

     public   void  removePrefs ( Context  context ){
         SharedPreferences  sharedPref  =  context . getSharedPreferences (
                context . getString ( R . string . pref_file_key ),   Context . MODE_PRIVATE );

         SharedPreferences . Editor  editor  =  sharedPref . edit ();
        editor . remove ( iid . toString () +   "_birthday" );
        editor . remove ( iid . toString () +   "_name" );
        editor . commit ();
     }

     public   static   void  clearAllPreferences ( Context  context ){
         SharedPreferences  sharedPref  =  context . getSharedPreferences (
                context . getString ( R . string . pref_file_key ),   Context . MODE_PRIVATE );

         SharedPreferences . Editor  editor  =  sharedPref . edit ();
        editor . clear ();

        editor . commit ();
     }

     public   BDayWidgetModel ( Integer  iid ,   String  name ,   String  dob )   {
         this . iid  =  iid ;
         this . name  =  name ;
         this . Bday   =  dob ;
     }

     public   Long  howManyDays (){
         Date  date1  =   Calendar . getInstance (). getTime ();
         Date  date2  =   Utils . getBirthDay ( Bday );
         if ( date2  ==   null ){
             return   0L ;
         }
         //this year birthday
        date2 . setYear ( date1 . getYear ());

         //due next year, it has pass
         if   ( date2 . getTime ()   <  date1 . getTime ()   ){
            date2 . setYear ( date1 . getYear ()   +   1 );
         }

         long  diff  =  date2 . getTime ()   -  date1 . getTime ();
         return    TimeUnit . DAYS . convert ( diff ,   TimeUnit . MILLISECONDS );
     }
     public   String  getName ()   {
         return  name ;
     }

     public   void  setName ( String  name )   {
         this . name  =  name ;
     }

     public   String  getBday ()   {
         return   Bday ;
     }




}

app/src/main/java/com/rkb/birthdaywidget/BDayWidgetProvider.java

app/src/main/java/com/rkb/birthdaywidget/BDayWidgetProvider.java

package  com . rkb . birthdaywidget ;

import  android . appwidget . AppWidgetManager ;
import  android . appwidget . AppWidgetProvider ;
import  android . content . ComponentName ;
import  android . content . Context ;
import  android . content . pm . PackageManager ;


public   class   BDayWidgetProvider   extends   AppWidgetProvider   {
     private   static   final   String  tag  =   "BDayWidgetProvider" ;
     public   void  onUpdate ( Context  context ,   AppWidgetManager  appWidgetManager ,   int []  appWidgetIds )   {
         final   int  N  =  appWidgetIds . length ;
         for   ( int  i = 0 ;  i < N ;  i ++ )   {
             int  appWidgetId  =  appWidgetIds [ i ];
            updateAppWidget ( context ,  appWidgetManager ,  appWidgetId );
         }
     }
     public   void  onDeleted ( Context  context ,   int []  appWidgetIds )   {
         final   int  N  =  appWidgetIds . length ;
         for   ( int  i = 0 ;  i < N ;  i ++ )   {
             BDayWidgetModel  bwm  =   BDayWidgetModel . retrieveModel ( context ,  appWidgetIds [ i ]);
            bwm . removePrefs ( context );
         }
     }

     public   void  onEnabled ( Context  context )   {
         BDayWidgetModel . clearAllPreferences ( context );
         PackageManager  pm  =  context . getPackageManager ();
        pm . setComponentEnabledSetting (
                 new   ComponentName ( "com.rkb.birthdaywidget" ,   ".BDayWidgetProvider" ),
                 PackageManager . COMPONENT_ENABLED_STATE_ENABLED ,
                 PackageManager . DONT_KILL_APP );
     }
     public   void  onDisabled ( Context  context )   {
         BDayWidgetModel . clearAllPreferences ( context );
         PackageManager  pm  =  context . getPackageManager ();
        pm . setComponentEnabledSetting (
                 new   ComponentName ( "com.rkb.birthdaywidget" ,   ".BDayWidgetProvider" ),
                 PackageManager . COMPONENT_ENABLED_STATE_DISABLED ,
                 PackageManager . DONT_KILL_APP );
     }
     private   void  updateAppWidget ( Context  context ,   AppWidgetManager  appWidgetManager ,
                                  int  appWidgetId )   {
         BDayWidgetModel  bwm  =   BDayWidgetModel . retrieveModel ( context ,  appWidgetId );
         if   ( bwm  ==   null )   {
             return ;
         }
         MainActivity . updateAppWidget ( context ,  appWidgetManager ,  bwm );
     }
}

app/src/main/java/com/rkb/birthdaywidget/MainActivity.java

app/src/main/java/com/rkb/birthdaywidget/MainActivity.java

package  com . rkb . birthdaywidget ;


import  android . app . Activity ;
import  android . app . PendingIntent ;
import  android . appwidget . AppWidgetManager ;
import  android . content . Context ;
import  android . content . Intent ;
import  android . net . Uri ;
import  android . os . Bundle ;
import  android . support . v7 . app . AppCompatActivity ;
import  android . util . Log ;
import  android . view . View ;
import  android . widget . Button ;
import  android . widget . EditText ;
import  android . widget . RemoteViews ;

public   class   MainActivity   extends   AppCompatActivity   {
     private   static   String  tag  =   "MainActivity" ;
     private   int  mAppWidgetId  =   AppWidgetManager . INVALID_APPWIDGET_ID ;

    @ Override
     protected   void  onCreate ( Bundle  savedInstanceState )   {
         super . onCreate ( savedInstanceState );
        setContentView ( R . layout . edit_bday_widget );
        setupButton ();
         //setup the save button
         //Get the widget instanceid from the intent extra
         Intent  intent  =  getIntent ();
         Bundle  extras  =  intent . getExtras ();
         if   ( extras  !=   null )   {
            mAppWidgetId  =  extras . getInt ( AppWidgetManager . EXTRA_APPWIDGET_ID ,
                     AppWidgetManager . INVALID_APPWIDGET_ID );
         }
         else   {
             Log . d ( tag ,   "Null starting intent" );
         }
     }


     private   void  setupButton ()   {
         Button  b  =   ( Button )   this . findViewById ( R . id . bdw_button_update_bday_widget );
        b . setOnClickListener ( new   Button . OnClickListener ()   {
             public   void  onClick ( View  v )   {
                saveConfiguration ( v );
             }
         });
     }

     //finish the activity.
     private   void  saveConfiguration ( View  v )   {
         String  name  =   this . getName ();
         String  date  =   this . getDate ();
         if   ( Utils . validateDate ( date )   ==   false )   {
             this . setDate ( "wrong date:"   +  date );
             return ;
         }
         if   ( this . mAppWidgetId  ==   AppWidgetManager . INVALID_APPWIDGET_ID )   {
             Log . d ( tag ,   "INVALID WIDGET ID" );
             return ;
         }
        updateAppWidgetLocal ( name ,  date );
         Intent  resultValue  =   new   Intent ();
        resultValue . putExtra ( AppWidgetManager . EXTRA_APPWIDGET_ID ,  mAppWidgetId );
        setResult ( RESULT_OK ,  resultValue );
        finish ();
     }

     private   String  getName ()   {
         EditText  nameEdit  =   ( EditText )   this . findViewById ( R . id . bdw_bday_name_id );
         String  name  =  nameEdit . getText (). toString ();
         return  name ;
     }

     private   String  getDate ()   {
         EditText  dateEdit  =   ( EditText )   this . findViewById ( R . id . bdw_bday_date_id );
         String  dateString  =  dateEdit . getText (). toString ();
         return  dateString ;
     }

     private   void  setDate ( String  errorDate )   {
         EditText  dateEdit  =   ( EditText )   this . findViewById ( R . id . bdw_bday_date_id );
        dateEdit . setText ( "" );
        dateEdit . setHint ( "month/day/year" );
        dateEdit . requestFocus ();
     }

     private   void  updateAppWidgetLocal ( String  name ,   String  dob )   {
         //Create an object to hold the data: widgetid, name, and dob
         BDayWidgetModel  m  =   new   BDayWidgetModel ( mAppWidgetId ,  name ,  dob );
         //Create the view and send it to the home screen
        updateAppWidget ( this ,   AppWidgetManager . getInstance ( this ),  m );
         //Use the data model object to save the id, name, and dob in prefs
        m . savePreferences ( this );
     }

     //A key method where a lot of magic happens
     public   static   void  updateAppWidget ( Context  context ,   AppWidgetManager  appWidgetManager ,
                                        BDayWidgetModel  widgetModel )   {
         //Construct a RemoteViews Object from the widget layout file
         RemoteViews  views  =   new   RemoteViews ( context . getPackageName (),   R . layout . bday_widget );
         //Use the control ids in the layout to set values on them.
         //Notice that these methods are limited and available on the
         //on the RemoteViews object. In other words we are not using the
         //TextView directly to set these values.
        views . setTextViewText ( R . id . bdw_w_name ,  widgetModel . getName ()   +   ":"   +  widgetModel . iid );
        views . setTextViewText ( R . id . bdw_w_date ,  widgetModel . getBday ());
         //update the name
        views . setTextViewText ( R . id . bdw_w_days ,   Long . toString ( widgetModel . howManyDays ()));
         //Set intents to invoke other activities when widget is clicked on
         Intent  defineIntent  =   new   Intent ( Intent . ACTION_VIEW ,   Uri . parse ( "http://www.google.com" ));
         PendingIntent  pendingIntent  =   PendingIntent . getActivity ( context ,
                 0   ,  defineIntent ,   0   /* no flags */ );
        views . setOnClickPendingIntent ( R . id . bdw_w_button_buy ,  pendingIntent );

         Intent  configIntent  =   new   Intent ( context ,   MainActivity . class );
        configIntent . putExtra ( AppWidgetManager . EXTRA_APPWIDGET_ID ,  widgetModel . iid );
         Uri  uri1  =   Uri . parse ( "myapp://widget/id/#togetituniqie"   +  widgetModel . iid );
        configIntent . setData ( Uri . withAppendedPath ( uri1 ,   String . valueOf ( widgetModel . iid )));
         PendingIntent  start_main  =   PendingIntent . getActivity ( context ,   0 ,
                configIntent ,   0 );

        views . setOnClickPendingIntent ( R . id . bdw_w_date ,  start_main );
        views . setOnClickPendingIntent ( R . id . bdw_w_name ,  start_main );
         // Tell the widget manager to paint the remote view
        appWidgetManager . updateAppWidget ( widgetModel . iid ,  views );
     }
}

app/src/main/java/com/rkb/birthdaywidget/Utils.java

app/src/main/java/com/rkb/birthdaywidget/Utils.java

package  com . rkb . birthdaywidget ;

import  java . text . DateFormat ;
import  java . text . ParseException ;
import  java . text . SimpleDateFormat ;
import  java . util . Date ;

public   class   Utils   {
     public   static   boolean  validateDate ( String  date ){
         String  dateFormat  =   "MM/dd/yyyy" ;
         DateFormat  sdf  =   new   SimpleDateFormat ( dateFormat );
        sdf . setLenient ( false );
         try   {
            sdf . parse ( date );
         }   catch   ( ParseException  e )   {
             return   false ;
         }
         return   true ;
     }
     public   static   Date  getBirthDay ( String  bday ){
         String  dateFormat  =   "MM/dd/yyyy" ;
         DateFormat  sdf  =   new   SimpleDateFormat ( dateFormat );
        sdf . setLenient ( false );
         try   {
             return  sdf . parse ( bday );
         }   catch   ( ParseException  e )   {
             return   null ;
         }
     }
}

app/src/main/res/drawable/background_shape.xml

app/src/main/res/drawable/ic_launcher_background.xml

app/src/main/res/drawable-v24/ic_launcher_foreground.xml

app/src/main/res/layout/bday_widget.xml

app/src/main/res/layout/edit_bday_widget.xml

app/src/main/res/menu/menu_main.xml

app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml

app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml

app/src/main/res/mipmap-hdpi/ic_launcher.png

app/src/main/res/mipmap-hdpi/ic_launcher_round.png

app/src/main/res/mipmap-mdpi/ic_launcher.png

app/src/main/res/mipmap-mdpi/ic_launcher_round.png

app/src/main/res/mipmap-xhdpi/ic_launcher.png

app/src/main/res/mipmap-xhdpi/ic_launcher_round.png

app/src/main/res/mipmap-xxhdpi/ic_launcher.png

app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png

app/src/main/res/mipmap-xxxhdpi/ic_launcher.png

app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png

app/src/main/res/values/colors.xml

#008577 #00574B #D81B60

app/src/main/res/values/dimens.xml

16dp

app/src/main/res/values/strings.xml

BirthDay Widget Settings com.rkb.birthdaywidget.preference_file_key

app/src/main/res/values/styles.xml

@color/colorPrimary @color/colorPrimaryDark @color/colorAccent @style/PreferenceThemeOverlay false true

app/src/main/res/xml/bday_appwidget_provider.xml

app/src/test/java/com/rkb/birthdaywidget/ExampleUnitTest.java

app/src/test/java/com/rkb/birthdaywidget/ExampleUnitTest.java

package  com . rkb . birthdaywidget ;

import  org . junit . Test ;

import   static  org . junit . Assert . * ;

/**
 * Example local unit test, which will execute on the development machine (host).
 *
 *  @see  <a href="http://d.android.com/tools/testing">Testing documentation</a>
 */
public   class   ExampleUnitTest   {
    @ Test
     public   void  addition_isCorrect ()   {
        assertEquals ( 4 ,   2   +   2 );
     }
}

gradle/wrapper/gradle-wrapper.jar

META-INF/MANIFEST.MF

Manifest-Version: 1.0 Implementation-Title: Gradle Implementation-Version: 4.6

org/gradle/wrapper/BootstrapMainStarter.class

package org.gradle.wrapper;
public synchronized class BootstrapMainStarter {
    public void BootstrapMainStarter();
    public void start(String[], java.io.File) throws Exception;
    private java.io.File findLauncherJar(java.io.File);
}

org/gradle/wrapper/Download$1.class

package org.gradle.wrapper;
synchronized class Download$1 {
}

org/gradle/wrapper/Download$ProxyAuthenticator.class

package org.gradle.wrapper;
synchronized class Download$ProxyAuthenticator extends java.net.Authenticator {
    private void Download$ProxyAuthenticator();
    protected java.net.PasswordAuthentication getPasswordAuthentication();
}

org/gradle/wrapper/Download.class

package org.gradle.wrapper;
public synchronized class Download implements IDownload {
    private static final int PROGRESS_CHUNK = 1048576;
    private static final int BUFFER_SIZE = 10240;
    private final Logger logger;
    private final String appName;
    private final String appVersion;
    private final DownloadProgressListener progressListener;
    public void Download(Logger, String, String);
    public void Download(Logger, DownloadProgressListener, String, String);
    private void configureProxyAuthentication();
    public void download(java.net.URI, java.io.File) throws Exception;
    private void downloadInternal(java.net.URI, java.io.File) throws Exception;
    static java.net.URI safeUri(java.net.URI) throws java.net.URISyntaxException;
    private void addBasicAuthentication(java.net.URI, java.net.URLConnection) throws java.io.IOException;
    private String base64Encode(String);
    private String calculateUserInfo(java.net.URI);
    private String calculateUserAgent();
}

org/gradle/wrapper/DownloadProgressListener.class

package org.gradle.wrapper;
public abstract interface DownloadProgressListener {
    public abstract void downloadStatusChanged(java.net.URI, long, long);
}

org/gradle/wrapper/ExclusiveFileAccessManager.class

package org.gradle.wrapper;
public synchronized class ExclusiveFileAccessManager {
    public static final String LOCK_FILE_SUFFIX = .lck;
    private final int timeoutMs;
    private final int pollIntervalMs;
    public void ExclusiveFileAccessManager(int, int);
    public Object access(java.io.File, java.util.concurrent.Callable) throws Exception;
    private long getTimeMillis();
    private static void maybeCloseQuietly(java.io.Closeable);
}

org/gradle/wrapper/GradleUserHomeLookup.class

package org.gradle.wrapper;
public synchronized class GradleUserHomeLookup {
    public static final String DEFAULT_GRADLE_USER_HOME;
    public static final String GRADLE_USER_HOME_PROPERTY_KEY = gradle.user.home;
    public static final String GRADLE_USER_HOME_ENV_KEY = GRADLE_USER_HOME;
    public void GradleUserHomeLookup();
    public static java.io.File gradleUserHome();
    static void <clinit>();
}

org/gradle/wrapper/GradleWrapperMain.class

package org.gradle.wrapper;
public synchronized class GradleWrapperMain {
    public static final String GRADLE_USER_HOME_OPTION = g;
    public static final String GRADLE_USER_HOME_DETAILED_OPTION = gradle-user-home;
    public static final String GRADLE_QUIET_OPTION = q;
    public static final String GRADLE_QUIET_DETAILED_OPTION = quiet;
    public void GradleWrapperMain();
    public static void main(String[]) throws Exception;
    private static void addSystemProperties(java.io.File, java.io.File);
    private static java.io.File rootDir(java.io.File);
    private static java.io.File wrapperProperties(java.io.File);
    private static java.io.File wrapperJar();
    static String wrapperVersion();
    private static java.io.File gradleUserHome(org.gradle.cli.ParsedCommandLine);
    private static Logger logger(org.gradle.cli.ParsedCommandLine);
}

org/gradle/wrapper/IDownload.class

package org.gradle.wrapper;
public abstract interface IDownload {
    public abstract void download(java.net.URI, java.io.File) throws Exception;
}

org/gradle/wrapper/Install$1.class

package org.gradle.wrapper;
synchronized class Install$1 implements java.util.concurrent.Callable {
    void Install$1(Install, java.io.File, java.io.File, java.net.URI, WrapperConfiguration, String);
    public java.io.File call() throws Exception;
}

org/gradle/wrapper/Install.class

package org.gradle.wrapper;
public synchronized class Install {
    public static final String DEFAULT_DISTRIBUTION_PATH = wrapper/dists;
    private final Logger logger;
    private final IDownload download;
    private final PathAssembler pathAssembler;
    private final ExclusiveFileAccessManager exclusiveFileAccessManager;
    public void Install(Logger, IDownload, PathAssembler);
    public java.io.File createDist(WrapperConfiguration) throws Exception;
    private String calculateSha256Sum(java.io.File) throws Exception;
    private java.io.File getAndVerifyDistributionRoot(java.io.File, String) throws Exception;
    private void verifyDownloadChecksum(String, java.io.File, String) throws Exception;
    private java.util.List listDirs(java.io.File);
    private void setExecutablePermissions(java.io.File);
    private boolean isWindows();
    private boolean deleteDir(java.io.File);
    private void unzip(java.io.File, java.io.File) throws java.io.IOException;
    private void copyInputStream(java.io.InputStream, java.io.OutputStream) throws java.io.IOException;
}

org/gradle/wrapper/Logger.class

package org.gradle.wrapper;
public synchronized class Logger implements Appendable {
    private final boolean quiet;
    public void Logger(boolean);
    public void log(String);
    public Appendable append(CharSequence);
    public Appendable append(CharSequence, int, int);
    public Appendable append(char);
}

org/gradle/wrapper/PathAssembler$LocalDistribution.class

package org.gradle.wrapper;
public synchronized class PathAssembler$LocalDistribution {
    private final java.io.File distZip;
    private final java.io.File distDir;
    public void PathAssembler$LocalDistribution(PathAssembler, java.io.File, java.io.File);
    public java.io.File getDistributionDir();
    public java.io.File getZipFile();
}

org/gradle/wrapper/PathAssembler.class

package org.gradle.wrapper;
public synchronized class PathAssembler {
    public static final String GRADLE_USER_HOME_STRING = GRADLE_USER_HOME;
    public static final String PROJECT_STRING = PROJECT;
    private java.io.File gradleUserHome;
    public void PathAssembler();
    public void PathAssembler(java.io.File);
    public PathAssembler$LocalDistribution getDistribution(WrapperConfiguration);
    private String rootDirName(String, WrapperConfiguration);
    private String getHash(String);
    private String removeExtension(String);
    private String getDistName(java.net.URI);
    private java.io.File getBaseDir(String);
}

org/gradle/wrapper/SystemPropertiesHandler.class

package org.gradle.wrapper;
public synchronized class SystemPropertiesHandler {
    static final String SYSTEM_PROP_PREFIX = systemProp.;
    public void SystemPropertiesHandler();
    public static java.util.Map getSystemProperties(java.io.File);
}

org/gradle/wrapper/WrapperConfiguration.class

package org.gradle.wrapper;
public synchronized class WrapperConfiguration {
    private java.net.URI distribution;
    private String distributionBase;
    private String distributionPath;
    private String distributionSha256Sum;
    private String zipBase;
    private String zipPath;
    public void WrapperConfiguration();
    public java.net.URI getDistribution();
    public void setDistribution(java.net.URI);
    public String getDistributionBase();
    public void setDistributionBase(String);
    public String getDistributionPath();
    public void setDistributionPath(String);
    public String getDistributionSha256Sum();
    public void setDistributionSha256Sum(String);
    public String getZipBase();
    public void setZipBase(String);
    public String getZipPath();
    public void setZipPath(String);
}

org/gradle/wrapper/WrapperExecutor.class

package org.gradle.wrapper;
public synchronized class WrapperExecutor {
    public static final String DISTRIBUTION_URL_PROPERTY = distributionUrl;
    public static final String DISTRIBUTION_BASE_PROPERTY = distributionBase;
    public static final String DISTRIBUTION_PATH_PROPERTY = distributionPath;
    public static final String DISTRIBUTION_SHA_256_SUM = distributionSha256Sum;
    public static final String ZIP_STORE_BASE_PROPERTY = zipStoreBase;
    public static final String ZIP_STORE_PATH_PROPERTY = zipStorePath;
    private final java.util.Properties properties;
    private final java.io.File propertiesFile;
    private final WrapperConfiguration config;
    public static WrapperExecutor forProjectDirectory(java.io.File);
    public static WrapperExecutor forWrapperPropertiesFile(java.io.File);
    void WrapperExecutor(java.io.File, java.util.Properties);
    private java.net.URI prepareDistributionUri() throws java.net.URISyntaxException;
    private java.net.URI readDistroUrl() throws java.net.URISyntaxException;
    private static void loadProperties(java.io.File, java.util.Properties) throws java.io.IOException;
    public java.net.URI getDistribution();
    public WrapperConfiguration getConfiguration();
    public void execute(String[], Install, BootstrapMainStarter) throws Exception;
    private String getProperty(String);
    private String getProperty(String, String);
    private String getProperty(String, String, boolean);
    private String reportMissingProperty(String);
}

gradle-wrapper-classpath.properties

projects=gradle-cli runtime=

org/gradle/cli/AbstractCommandLineConverter.class

package org.gradle.cli;
public abstract synchronized class AbstractCommandLineConverter implements CommandLineConverter {
    public void AbstractCommandLineConverter();
    public Object convert(Iterable, Object) throws CommandLineArgumentException;
}

org/gradle/cli/AbstractPropertiesCommandLineConverter.class

package org.gradle.cli;
public abstract synchronized class AbstractPropertiesCommandLineConverter extends AbstractCommandLineConverter {
    public void AbstractPropertiesCommandLineConverter();
    protected abstract String getPropertyOption();
    protected abstract String getPropertyOptionDetailed();
    protected abstract String getPropertyOptionDescription();
    public void configure(CommandLineParser);
    public java.util.Map convert(ParsedCommandLine, java.util.Map) throws CommandLineArgumentException;
}

org/gradle/cli/CommandLineArgumentException.class

package org.gradle.cli;
public synchronized class CommandLineArgumentException extends RuntimeException {
    public void CommandLineArgumentException(String);
    public void CommandLineArgumentException(String, Throwable);
}

org/gradle/cli/CommandLineConverter.class

package org.gradle.cli;
public abstract interface CommandLineConverter {
    public abstract Object convert(Iterable, Object) throws CommandLineArgumentException;
    public abstract Object convert(ParsedCommandLine, Object) throws CommandLineArgumentException;
    public abstract void configure(CommandLineParser);
}

org/gradle/cli/CommandLineOption.class

package org.gradle.cli;
public synchronized class CommandLineOption {
    private final java.util.Set options;
    private Class argumentType;
    private String description;
    private boolean incubating;
    private final java.util.Set groupWith;
    private boolean deprecated;
    public void CommandLineOption(Iterable);
    public java.util.Set getOptions();
    public CommandLineOption hasArgument(Class);
    public CommandLineOption hasArgument();
    public CommandLineOption hasArguments();
    public String getDescription();
    private void appendMessage(StringBuilder, boolean, String);
    public CommandLineOption hasDescription(String);
    public boolean getAllowsArguments();
    public boolean getAllowsMultipleArguments();
    public CommandLineOption deprecated();
    public CommandLineOption incubating();
    public boolean isDeprecated();
    public boolean isIncubating();
    java.util.Set getGroupWith();
    void groupWith(java.util.Set);
}

org/gradle/cli/CommandLineParser$1.class

package org.gradle.cli;
synchronized class CommandLineParser$1 {
}

org/gradle/cli/CommandLineParser$AfterFirstSubCommand.class

package org.gradle.cli;
synchronized class CommandLineParser$AfterFirstSubCommand extends CommandLineParser$OptionAwareParserState {
    private void CommandLineParser$AfterFirstSubCommand(CommandLineParser, ParsedCommandLine);
    public CommandLineParser$OptionParserState onStartOption(String, String);
}

org/gradle/cli/CommandLineParser$AfterOptions.class

package org.gradle.cli;
synchronized class CommandLineParser$AfterOptions extends CommandLineParser$ParserState {
    private final ParsedCommandLine commandLine;
    private void CommandLineParser$AfterOptions(ParsedCommandLine);
    public boolean maybeStartOption(String);
    public CommandLineParser$OptionParserState onStartOption(String, String);
    public CommandLineParser$ParserState onNonOption(String);
}

org/gradle/cli/CommandLineParser$BeforeFirstSubCommand.class

package org.gradle.cli;
synchronized class CommandLineParser$BeforeFirstSubCommand extends CommandLineParser$OptionAwareParserState {
    private void CommandLineParser$BeforeFirstSubCommand(CommandLineParser, ParsedCommandLine);
    public CommandLineParser$OptionParserState onStartOption(String, String);
}

org/gradle/cli/CommandLineParser$CaseInsensitiveStringComparator.class

package org.gradle.cli;
final synchronized class CommandLineParser$CaseInsensitiveStringComparator implements java.util.Comparator {
    private void CommandLineParser$CaseInsensitiveStringComparator();
    public int compare(String, String);
}

org/gradle/cli/CommandLineParser$KnownOptionParserState.class

package org.gradle.cli;
synchronized class CommandLineParser$KnownOptionParserState extends CommandLineParser$OptionParserState {
    private final CommandLineParser$OptionString optionString;
    private final CommandLineOption option;
    private final ParsedCommandLine commandLine;
    private final CommandLineParser$ParserState state;
    private final java.util.List values;
    private void CommandLineParser$KnownOptionParserState(CommandLineParser, CommandLineParser$OptionString, CommandLineOption, ParsedCommandLine, CommandLineParser$ParserState);
    public CommandLineParser$ParserState onArgument(String);
    public CommandLineParser$ParserState onStartNextArg();
    public boolean getHasArgument();
    public CommandLineParser$ParserState onComplete();
}

org/gradle/cli/CommandLineParser$MissingOptionArgState.class

package org.gradle.cli;
synchronized class CommandLineParser$MissingOptionArgState extends CommandLineParser$ParserState {
    private final CommandLineParser$OptionParserState option;
    private void CommandLineParser$MissingOptionArgState(CommandLineParser$OptionParserState);
    public boolean maybeStartOption(String);
    public CommandLineParser$OptionParserState onStartOption(String, String);
    public CommandLineParser$ParserState onNonOption(String);
    public void onCommandLineEnd();
}

org/gradle/cli/CommandLineParser$OptionAwareParserState.class

package org.gradle.cli;
abstract synchronized class CommandLineParser$OptionAwareParserState extends CommandLineParser$ParserState {
    protected final ParsedCommandLine commandLine;
    protected void CommandLineParser$OptionAwareParserState(CommandLineParser, ParsedCommandLine);
    public boolean maybeStartOption(String);
    public CommandLineParser$ParserState onNonOption(String);
}

org/gradle/cli/CommandLineParser$OptionComparator.class

package org.gradle.cli;
final synchronized class CommandLineParser$OptionComparator implements java.util.Comparator {
    private void CommandLineParser$OptionComparator();
    public int compare(CommandLineOption, CommandLineOption);
}

org/gradle/cli/CommandLineParser$OptionParserState.class

package org.gradle.cli;
abstract synchronized class CommandLineParser$OptionParserState {
    private void CommandLineParser$OptionParserState();
    public abstract CommandLineParser$ParserState onStartNextArg();
    public abstract CommandLineParser$ParserState onArgument(String);
    public abstract boolean getHasArgument();
    public abstract CommandLineParser$ParserState onComplete();
}

org/gradle/cli/CommandLineParser$OptionString.class

package org.gradle.cli;
synchronized class CommandLineParser$OptionString {
    private final String arg;
    private final String option;
    private void CommandLineParser$OptionString(String, String);
    public String getDisplayName();
    public String toString();
}

org/gradle/cli/CommandLineParser$OptionStringComparator.class

package org.gradle.cli;
final synchronized class CommandLineParser$OptionStringComparator implements java.util.Comparator {
    private void CommandLineParser$OptionStringComparator();
    public int compare(String, String);
}

org/gradle/cli/CommandLineParser$ParserState.class

package org.gradle.cli;
abstract synchronized class CommandLineParser$ParserState {
    private void CommandLineParser$ParserState();
    public abstract boolean maybeStartOption(String);
    boolean isOption(String);
    public abstract CommandLineParser$OptionParserState onStartOption(String, String);
    public abstract CommandLineParser$ParserState onNonOption(String);
    public void onCommandLineEnd();
}

org/gradle/cli/CommandLineParser$UnknownOptionParserState.class

package org.gradle.cli;
synchronized class CommandLineParser$UnknownOptionParserState extends CommandLineParser$OptionParserState {
    private final CommandLineParser$ParserState state;
    private final String arg;
    private final ParsedCommandLine commandLine;
    private void CommandLineParser$UnknownOptionParserState(String, ParsedCommandLine, CommandLineParser$ParserState);
    public boolean getHasArgument();
    public CommandLineParser$ParserState onStartNextArg();
    public CommandLineParser$ParserState onArgument(String);
    public CommandLineParser$ParserState onComplete();
}

org/gradle/cli/CommandLineParser.class

package org.gradle.cli;
public synchronized class CommandLineParser {
    private static final java.util.regex.Pattern OPTION_NAME_PATTERN;
    private java.util.Map optionsByString;
    private boolean allowMixedOptions;
    private boolean allowUnknownOptions;
    public void CommandLineParser();
    public transient ParsedCommandLine parse(String[]) throws CommandLineArgumentException;
    public ParsedCommandLine parse(Iterable) throws CommandLineArgumentException;
    public CommandLineParser allowMixedSubcommandsAndOptions();
    public CommandLineParser allowUnknownOptions();
    public transient CommandLineParser allowOneOf(String[]);
    public void printUsage(Appendable);
    private static String join(java.util.Collection, String);
    public transient CommandLineOption option(String[]);
    static void <clinit>();
}

org/gradle/cli/ParsedCommandLine.class

package org.gradle.cli;
public synchronized class ParsedCommandLine {
    private final java.util.Map optionsByString;
    private final java.util.Set presentOptions;
    private final java.util.Set removedOptions;
    private final java.util.List extraArguments;
    void ParsedCommandLine(Iterable);
    public String toString();
    private String quoteAndJoin(Iterable);
    public boolean hasOption(String);
    public boolean hadOptionRemoved(String);
    public boolean hasAnyOption(java.util.Collection);
    public ParsedCommandLineOption option(String);
    public java.util.List getExtraArguments();
    void addExtraValue(String);
    ParsedCommandLineOption addOption(String, CommandLineOption);
    void removeOption(CommandLineOption);
}

org/gradle/cli/ParsedCommandLineOption.class

package org.gradle.cli;
public synchronized class ParsedCommandLineOption {
    private final java.util.List values;
    public void ParsedCommandLineOption();
    public String getValue();
    public java.util.List getValues();
    public void addArgument(String);
    public boolean hasValue();
}

org/gradle/cli/ProjectPropertiesCommandLineConverter.class

package org.gradle.cli;
public synchronized class ProjectPropertiesCommandLineConverter extends AbstractPropertiesCommandLineConverter {
    public void ProjectPropertiesCommandLineConverter();
    protected String getPropertyOption();
    protected String getPropertyOptionDetailed();
    protected String getPropertyOptionDescription();
}

org/gradle/cli/SystemPropertiesCommandLineConverter.class

package org.gradle.cli;
public synchronized class SystemPropertiesCommandLineConverter extends AbstractPropertiesCommandLineConverter {
    public void SystemPropertiesCommandLineConverter();
    protected String getPropertyOption();
    protected String getPropertyOptionDetailed();
    protected String getPropertyOptionDescription();
}

gradle-cli-classpath.properties

projects= runtime=

build-receipt.properties

versionNumber=4.6

gradle/wrapper/gradle-wrapper.properties

#Mon Jan 20 12:52:10 EAT 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip

.gitignore

*.iml .gradle /local.properties /.idea/caches /.idea/libraries /.idea/modules.xml /.idea/workspace.xml /.idea/navEditor.xml /.idea/assetWizardSettings.xml .DS_Store /build /captures .externalNativeBuild

BirthDayWidget2.iml