
    O3j.-                    0   d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	m
Z
 ddlmZ  G d d	e      Z ed
      dd       Z ed
      dd       Z ed
      dd       Z ed
      dd       Z ed
      dd       Z ed
      dd       Zd	gZy)zAndroid.    )annotationsN)	lru_cache)TYPE_CHECKINGcast   )PlatformDirsABCc                     e Zd ZdZedd       Zedd       Zedd       Zedd       Zedd       Z	edd       Z
edd       Zedd	       Zedd
       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zy)Androida  Platform directories for Android.

    Follows the guidance `from here <https://android.stackexchange.com/a/216132>`_. Directories are typically located
    under the app's private storage (``/data/user/<userid>/<packagename>/``).

    Makes use of the `appname <platformdirs.api.PlatformDirsABC.appname>`, `version
    <platformdirs.api.PlatformDirsABC.version>`, `opinion <platformdirs.api.PlatformDirsABC.opinion>`, `ensure_exists
    <platformdirs.api.PlatformDirsABC.ensure_exists>`.

    c                J    | j                  t        dt                     d      S )ze:returns: data directory tied to the user, e.g. ``/data/user/<userid>/<packagename>/files/<AppName>``strfiles_append_app_name_and_versionr   _android_folderselfs    A/DATA/.local/lib/python3.12/site-packages/platformdirs/android.pyuser_data_dirzAndroid.user_data_dir   "     00e_=N1OQXYY    c                    | j                   S )zA:returns: data directory shared by users, same as `user_data_dir`r   r   s    r   site_data_dirzAndroid.site_data_dir        !!!r   c                J    | j                  t        dt                     d      S )zn:returns: config directory tied to the user, e.g. ``/data/user/<userid>/<packagename>/shared_prefs/<AppName>``r   shared_prefsr   r   s    r   user_config_dirzAndroid.user_config_dir$   s"     00e_=N1OQ_``r   c                    | j                   S )zE:returns: config directory shared by users, same as `user_config_dir`r   r   s    r   site_config_dirzAndroid.site_config_dir)        ###r   c                J    | j                  t        dt                     d      S )zf:returns: cache directory tied to the user, e.g.,``/data/user/<userid>/<packagename>/cache/<AppName>``r   cacher   r   s    r   user_cache_dirzAndroid.user_cache_dir.   r   r   c                    | j                   S )zC:returns: cache directory shared by users, same as `user_cache_dir`)r$   r   s    r   site_cache_dirzAndroid.site_cache_dir3        """r   c                    | j                   S )zC:returns: state directory tied to the user, same as `user_data_dir`r   r   s    r   user_state_dirzAndroid.user_state_dir8   r   r   c                    | j                   S )zC:returns: state directory shared by users, same as `user_state_dir`)r)   r   s    r   site_state_dirzAndroid.site_state_dir=   r'   r   c                    | j                   }| j                  r1t        j                  j	                  |d      }| j                  |       |S )z:returns: log directory tied to the user, same as `user_cache_dir` if not opinionated else ``log`` in it, e.g. ``/data/user/<userid>/<packagename>/cache/<AppName>/log``logr$   opinionospathjoin_optionally_create_directoryr   r1   s     r   user_log_dirzAndroid.user_log_dirB   =     ""<<77<<e,D--d3r   c                    | j                   S )z?:returns: log directory shared by users, same as `user_log_dir`)r5   r   s    r   site_log_dirzAndroid.site_log_dirK           r   c                    t               S )zU:returns: documents directory tied to the user e.g. ``/storage/emulated/0/Documents``)_android_documents_folderr   s    r   user_documents_dirzAndroid.user_documents_dirP        )**r   c                    t               S )zU:returns: downloads directory tied to the user e.g. ``/storage/emulated/0/Downloads``)_android_downloads_folderr   s    r   user_downloads_dirzAndroid.user_downloads_dirU   r=   r   c                    t               S )zS:returns: pictures directory tied to the user e.g. ``/storage/emulated/0/Pictures``)_android_pictures_folderr   s    r   user_pictures_dirzAndroid.user_pictures_dirZ   s     ())r   c                    t               S )zT:returns: videos directory tied to the user e.g. ``/storage/emulated/0/DCIM/Camera``)_android_videos_folderr   s    r   user_videos_dirzAndroid.user_videos_dir_   s     &''r   c                    t               S )zM:returns: music directory tied to the user e.g. ``/storage/emulated/0/Music``)_android_music_folderr   s    r   user_music_dirzAndroid.user_music_dird   s     %&&r   c                     y)zQ:returns: desktop directory tied to the user e.g. ``/storage/emulated/0/Desktop``z/storage/emulated/0/Desktop r   s    r   user_desktop_dirzAndroid.user_desktop_diri   s     -r   c                     y)zS:returns: projects directory tied to the user e.g. ``/storage/emulated/0/Projects``z/storage/emulated/0/ProjectsrK   r   s    r   user_projects_dirzAndroid.user_projects_dirn   s     .r   c                     y)zU:returns: public share directory tied to the user e.g. ``/storage/emulated/0/Public``z/storage/emulated/0/PublicrK   r   s    r   user_publicshare_dirzAndroid.user_publicshare_dirs   s     ,r   c                     y)zU:returns: templates directory tied to the user e.g. ``/storage/emulated/0/Templates``z/storage/emulated/0/TemplatesrK   r   s    r   user_templates_dirzAndroid.user_templates_dirx   s     /r   c                     y)zM:returns: fonts directory tied to the user e.g. ``/storage/emulated/0/fonts``z/storage/emulated/0/fontsrK   r   s    r   user_fonts_dirzAndroid.user_fonts_dir}   s     +r   c                    | j                   S )zL:returns: preference directory tied to the user, same as ``user_config_dir``r   r   s    r   user_preference_dirzAndroid.user_preference_dir   r!   r   c                h    t         j                  j                  t        dt	                     dd      S )z^:returns: bin directory tied to the user, e.g. ``/data/user/<userid>/<packagename>/files/bin``r   r   bin)r0   r1   r2   r   r   r   s    r   user_bin_dirzAndroid.user_bin_dir   s%     ww||D(9:GUKKr   c                    | j                   S )z?:returns: bin directory shared by users, same as `user_bin_dir`)rY   r   s    r   site_bin_dirzAndroid.site_bin_dir   r9   r   c                    | j                   S )zJ:returns: applications directory tied to the user, same as `user_data_dir`r   r   s    r   user_applications_dirzAndroid.user_applications_dir   r   r   c                    | j                   S )zQ:returns: applications directory shared by users, same as `user_applications_dir`)r]   r   s    r   site_applications_dirzAndroid.site_applications_dir   s     )))r   c                    | j                   }| j                  r1t        j                  j	                  |d      }| j                  |       |S )z:returns: runtime directory tied to the user, same as `user_cache_dir` if not opinionated else ``tmp`` in it, e.g. ``/data/user/<userid>/<packagename>/cache/<AppName>/tmp``tmpr.   r4   s     r   user_runtime_dirzAndroid.user_runtime_dir   r6   r   c                    | j                   S )zG:returns: runtime directory shared by users, same as `user_runtime_dir`)rb   r   s    r   site_runtime_dirzAndroid.site_runtime_dir   s     $$$r   Nreturnr   ) __name__
__module____qualname____doc__propertyr   r   r   r    r$   r&   r)   r+   r5   r8   r<   r@   rC   rF   rI   rL   rN   rP   rR   rT   rV   rY   r[   r]   r_   rb   rd   rK   r   r   r
   r
      s+   	 Z Z " " a a $ $ Z Z # # " " # #   ! ! + + + + * * ( ( ' ' - - . . , , / / + + $ $ L L ! ! " " * *   % %r   r
   )maxsizec                    d} t         sM	 ddlm} t        d|j	                               }|j                         j                         j                         } | ;	 ddl	m
}  |d      }|j                         j                         j                         } | St        j                  d      }t        j                  D ])  }|j                  |      s|j!                  d      d   }  n d} | Tt        j                  d      }t        j                  D ]*  }|j                  |      s|j!                  d      d   }  | S  d} | S # t        $ r d} Y w xY w# t        $ r d} Y w xY w)	zF:returns: base folder for the Android OS or None if it cannot be foundNr   )	mActivityandroid.content.Context	autoclassz /data/(data|user/\d+)/(.+)/filesz/filesz7/mnt/expand/[a-fA-F0-9-]{36}/(data|user/\d+)/(.+)/files)r   androidrn   r   getApplicationContextgetFilesDirgetParentFilegetAbsolutePath	Exceptionjniusrq   recompilesysr1   matchsplit)resultrn   contextrq   patternr1   s         r   r   r      s\    F 	)4i6U6U6WXG((*88:JJLF ~	 ( 9:G((*88:JJLF ~ **@AHHD}}T"H-a0 
 F~ **WXHHD}}T"H-a0 M 
 FMA  	F	  	F	s$   AE  :E  EEEEc                     	 ddl m}   | d      } | d      }|j                  |j                        j	                         }|S # t
        $ r d}Y |S w xY w)z-:returns: documents folder for the Android OSr   rp   ro   android.os.Environmentz/storage/emulated/0/Documents)rx   rq   getExternalFilesDirDIRECTORY_DOCUMENTSrv   rw   )rq   r   environmentdocuments_dirs       r   r;   r;      c    8#56 89$889X9XYiik   878   ?A AAc                     	 ddl m}   | d      } | d      }|j                  |j                        j	                         }|S # t
        $ r d}Y |S w xY w)z-:returns: downloads folder for the Android OSr   rp   ro   r   z/storage/emulated/0/Downloads)rx   rq   r   DIRECTORY_DOWNLOADSrv   rw   )rq   r   r   downloads_dirs       r   r?   r?      r   r   c                     	 ddl m}   | d      } | d      }|j                  |j                        j	                         }|S # t
        $ r d}Y |S w xY w)z,:returns: pictures folder for the Android OSr   rp   ro   r   z/storage/emulated/0/Pictures)rx   rq   r   DIRECTORY_PICTURESrv   rw   )rq   r   r   pictures_dirs       r   rB   rB      sc    6#56 89#778V8VWggi   656r   c                     	 ddl m}   | d      } | d      }|j                  |j                        j	                         }|S # t
        $ r d}Y |S w xY w)z*:returns: videos folder for the Android OSr   rp   ro   r   z/storage/emulated/0/DCIM/Camera)rx   rq   r   DIRECTORY_DCIMrv   rw   )rq   r   r   
videos_dirs       r   rE   rE   
  sc    7#56 89!55k6P6PQaac
   76
7r   c                     	 ddl m}   | d      } | d      }|j                  |j                        j	                         }|S # t
        $ r d}Y |S w xY w)z):returns: music folder for the Android OSr   rp   ro   r   z/storage/emulated/0/Music)rx   rq   r   DIRECTORY_MUSICrv   rw   )rq   r   r   	music_dirs       r   rH   rH     sc    0#56 89 44[5P5PQaac	   0/	0r   )rf   z
str | Nonere   )rj   
__future__r   r0   ry   r{   	functoolsr   typingr   r   apir   r
   r   r;   r?   rB   rE   rH   __all__rK   r   r   <module>r      s     " 	 	 
  &  Y%o Y%x 1, ,^ 1  1  1  1  1   r   