Android рдкрд░ рд╡рд┐рдЬреЗрдЯред рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреБрд░реНрд▓рдн рд╕реБрд╡рд┐рдзрд╛

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореЗрд░рд╛ рдирд╛рдо рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдЦрд╛рдХреАрдореЛрд╡ рд╣реИ, рдореИрдВ FINCH рдореЗрдВ рдПрдХ Android рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВред

рдХреНрдпрд╛ рдРрд╕рд╛ рд╣реБрдЖ рдХрд┐ рдЖрдкрдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдерд╛, рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдбрд┐рдЬрд╛рдЗрдирд░ рдЕрдХреНрд╕рд░ рд╡рд┐рдЧреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ? рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ рд╡рд┐рдЬреЗрдЯ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рджреБрд░реНрд▓рдн рдорд╛рдорд▓рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╢рд╛рдпрдж рд╣реА рдХреЛрдИ

рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдПрдХ рд╡рд┐рдЬреЗрдЯ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдЬреЛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдФрд░ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░реЗрдЧрд╛ред

рд╡рд┐рдЬреЗрдЯ рдирд┐рд░реНрдорд╛рдг


рдПрдХ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

  1. рд╡рд┐рдЬреЗрдЯ рдШрдЯрдХреЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВред
  2. рд╕реНрдХреНрд░реАрди рдЧреНрд░рд┐рдб рдореЗрдВ рд╡рд┐рдЬреЗрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛рдПрдБред
  3. рд╡рд┐рдЬреЗрдЯ рдЕрджреНрдпрддрди рд╕реБрд╡рд┐рдзрд╛рдПрдБред

рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдХрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред

рд╡рд┐рдЬреЗрдЯ рдШрдЯрдХреЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ


рдХреЛрдИ рднреА рдбреЗрд╡рд▓рдкрд░ рдЬрд┐рд╕рдиреЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ RemoteViews рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕ рдЖрдЗрдЯрдо рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИред рдпрджрд┐ рдЖрдк рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реИрдВ, рддреЛ рдЕрдЧрд▓реЗ рдмрд┐рдВрджреБ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

RemoteViews рдХреЛ рд╡реНрдпреВ рдкрджрд╛рдиреБрдХреНрд░рдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рдкрджрд╛рдиреБрдХреНрд░рдо рдкреНрд░рдмрдВрдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЧреБрдгреЛрдВ рдпрд╛ рдХреЙрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡реНрдпреВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ, рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред RemoteViews рдореЗрдВ рдорд╛рдирдХ android.widget рдШрдЯрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдШрдЯрдХреЛрдВ рдХрд╛ рдПрдХ рд╕реАрдорд┐рдд рд╕реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИред

рд╡рд┐рдЬреЗрдЯ рдХреЗ рдЕрдВрджрд░ рджреЗрдЦреЗрдВ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рд╣реЛрдо рд╕реНрдХреНрд░реАрди рд╣реИ), рдЗрд╕рд▓рд┐рдП, рд╡рд┐рдЬреЗрдЯ рдХреЗ рдпреВрдЖрдИ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди - AppWidgetProvider рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╕реНрдХреНрд░реАрди рдХреЗ "рдЧреНрд░рд┐рдб" рдореЗрдВ рд╡рд┐рдЬреЗрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдмрд┐рдВрджреБ рдЗрддрдирд╛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдпрджрд┐ рдЖрдк рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рджреЗрдЦреЗрдВ :
рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдиреНрдпреВрдирддрдо рдФрд░ рдиреНрдпреВрдирддрдо рдКрдВрдЪрд╛рдИ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрднреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдиреНрдпреВрдирддрдо рдорд╛рддреНрд░рд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреА рд╣реЛрдо рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рд╡рд┐рдЬреЗрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдиреНрдпреВрдирддрдо рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рд╕реЗ рдЕрдзрд┐рдХ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░реЗрдЧрд╛ред рдПрдВрдбреНрд░реЙрдЗрдб рд╣реЛрдо рд╕реНрдХреНрд░реАрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдкрд▓рдмреНрдз рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХрд╛ рдПрдХ рдЧреНрд░рд┐рдб рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рд╡рд┐рдЬреЗрдЯ рдФрд░ рдЖрдЗрдХрди рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЧреНрд░рд┐рдб рдПрдХ рдЙрдкрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдИ рд╣реИрдВрдбрд╕реЗрдЯ 4x4 рдЧреНрд░рд┐рдб рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЯреИрдмрд▓реЗрдЯ рдПрдХ рдмрдбрд╝реА, 8x7 рдЧреНрд░рд┐рдб рдХреА рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд░реВрд╕реА рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛: рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдиреНрдпреВрдирддрдо рд╕реНрдерд╛рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдиреНрдпреВрдирддрдо рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрдЧрд╛ред

рдЫрд╡рд┐
рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдмрдирд╛рддреЗ рд╕рдордп рд╡рд┐рдЬреЗрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрджрд╛рд╣рд░рдг

рд╣реЛрдо рд╕реНрдХреНрд░реАрди рдкрд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдПрдХ рд╡рд┐рдЬреЗрдЯ рдЖрдорддреМрд░ рдкрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХреА рдЧрдИ рд╕реНрдХреНрд░реАрди рдХреА рдиреНрдпреВрдирддрдо рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдерд╛рди рд▓реЗрдЧрд╛ред рдПрдВрдбреНрд░реЙрдЗрдб рд╣реЛрдо рд╕реНрдХреНрд░реАрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдкрд▓рдмреНрдз рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреА рдПрдХ рдЧреНрд░рд┐рдб рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдЬреЗрдЯ рдФрд░ рдЖрдЗрдХрди рд╕реНрдерд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЧреНрд░рд┐рдб рдбрд┐рд╡рд╛рдЗрд╕ рджреНрд╡рд╛рд░рд╛ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдИ рдлреЛрди 4x4 рдЧреНрд░рд┐рдб рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЯреИрдмрд▓реЗрдЯ рдмрдбрд╝реЗ 8x4 рдЧреНрд░рд┐рдб рдХреА рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЧреНрд░рд┐рдб рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЧреНрд░рд┐рдб рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд╡рд┐рдЬреЗрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдХреЙрд▓рдо рдФрд░ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреЗрдЯ рдХреА рдиреНрдпреВрдирддрдо рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рдХреА рдЧрдгрдирд╛ рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:

minSideSizeDp = 70 ├Ч n - 30, рдЬрд╣рд╛рдВ n рдкрдВрдХреНрддрд┐рдпреЛрдВ рдпрд╛ рд╕реНрддрдВрднреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред

рдлрд┐рд▓рд╣рд╛рд▓, рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЕрдзрд┐рдХрддрдо рдиреНрдпреВрдирддрдо рдЧреНрд░рд┐рдб 4x4 рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рд╡рд┐рдЬреЗрдЯ рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╡рд┐рдЬреЗрдЯ рдЕрджреНрдпрддрди рд╕реБрд╡рд┐рдзрд╛рдПрдБ


рдЪреВрдВрдХрд┐ AppWidgetProvider рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯрд╕реАрд╡рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ, рдЖрдк рдЗрд╕реЗ рдирд┐рдпрдорд┐рдд рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред AppWidgetProvider рдмрд╕ onReceive рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдЗрд░рд╛рджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдПрдХреНрд╕реНрдЯреНрд░рд╛ рдХреЗ рд╕рд╛рде рдЕрд╡рд░реЛрдзрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред

рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдХрдард┐рдирд╛рдИ рдкреИрджрд╛ рд╣реБрдИ - рдкреВрд░реЗ рдмрд┐рдВрджреБ рдЖрдИрдУрдПрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдЕрдВрддрд░ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ iOS рд╡рд┐рдЬреЗрдЯ рдкрд░ рдбреЗрдЯрд╛ рддрдм рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╡рд┐рдЬреЗрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ, рдРрд╕реА рдШрдЯрдирд╛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рдЬреЗрдЯ рджреЗрдЦрддрд╛ рд╣реИ рддреЛ рд╣рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рддрд╛ред

рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд▓рд┐рдП, рдЕрдиреБрд╢рдВрд╕рд┐рдд рдЕрдкрдбреЗрдЯ рд╡рд┐рдзрд┐ рдПрдХ рдЯрд╛рдЗрдорд░ рдЕрдкрдбреЗрдЯ рд╣реИред рдЯрд╛рдЗрдорд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╡рд┐рдЬреЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдкрдбреЗрдЯрдкреЗрд░рд┐рдпреЛрдбрд┐рдорд┐рд▓рд┐рд╕ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╕реЗрдЯрд┐рдВрдЧ рд╣рд░ 30 рдорд┐рдирдЯ рдореЗрдВ рдПрдХ рдмрд╛рд░ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИред рдиреАрдЪреЗ рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред

рд╡рд┐рдЬреЗрдЯ рдорд╛рдорд▓рд╛


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рдо рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░рд╛рдЬреНрдп рд▓реЙрдЯрд░реА рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреЛрд▓реЛрдЯреЛ рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рдПрдХ рдмрдбрд╝реА рд▓реЙрдЯрд░реА рдЖрд╡реЗрджрди рдореЗрдВ рдПрдлрдПрдирд╕реАрдПрдЪ рдерд╛ред

рдЖрд╡реЗрджрди рдХрд╛ рдХрд╛рд░реНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд▓реЙрдЯрд░реА рдХреА рдкрд╕рдВрдж рдФрд░ рдЯрд┐рдХрдЯ рдЦрд░реАрджрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рдмрдирд╛рдирд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╡рд┐рдЬреЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЦрд░реАрдж рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдЧреЗрдо рджрд┐рдЦрд╛рдПрдВ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреИрдк рдХрд░реЗрдВред рдЦреЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рд╕рд░реНрд╡рд░ рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рдЬреЗрдЯ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рджреЛ рд░рд╛рдЬреНрдп рд╢рд╛рдорд┐рд▓ рдереЗ:

  • рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП
  • рдПрдХ рдЕрдирдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП

рдПрдХ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдкрдирд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдбреЗрдЯрд╛ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рдЖрдВрддрд░рд┐рдХ рдмрдЯреБрдП рдХреА рд╕реНрдерд┐рддрд┐, рдбреНрд░реЙ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рдЯрд┐рдХрдЯреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЦреЛрдИ рд╣реБрдИ рдЬреАрдд рдХреА рдорд╛рддреНрд░рд╛ред рдЗрди рддрддреНрд╡реЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рд╕рдВрдХреНрд░рдордг рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░реЛрдВ рд╕реЗ рдЕрд▓рдЧред

рдЫрд╡рд┐

рдЫрд╡рд┐

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛, рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ "рддрд╛рдЬрд╝рд╛" рдмрдЯрди рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдЙрд╕ рдкрд░ рдФрд░ рдЕрдзрд┐рдХред

рджреЛ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рд╕рд╛рдордЧреНрд░реА рдХрд╛рд░реНрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП RemoteViewservice рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ RemoteAdapter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рдФрд░ рдЕрдм рдереЛрдбрд╝рд╛ рдХреЛрдб рдФрд░ рдХреИрд╕реЗ рд╕рдм рдХреБрдЫ рдЕрдВрджрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреБрднрд╡ рдерд╛, рддреЛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдЬреЗрдЯ рдбреЗрдЯрд╛ рдХрд╛ рдХреЛрдИ рднреА рдЕрдкрдбреЗрдЯ рдСрдирдкрдбреЗрдЯ рд╡рд┐рдзрд┐ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ:

override fun onUpdate(
        context: Context,
        appWidgetManager: AppWidgetManager,
        appWidgetIds: IntArray
    ) {
        injector.openScope(this, *arrayOf(this))
        // update each of the widgets with the remote adapter
        appWidgetIds
            .forEach {
                updateWidget(context, appWidgetManager, it)
          }
    }

рд╣рдо рдЕрдкрдиреЗ рд╡рд┐рдЬреЗрдЯ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдкрдбреЗрдЯ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВред

private fun updateWidget(
        context: Context,
        appWidgetManager: AppWidgetManager,
        appWidgetId: Int
    ) {
// remoteViews   widgetId
        val remoteViews = RemoteViews(
            context.packageName,
            R.layout.app_widget_layout
...
//        
...
//    remoteViews
updateRemoteAdapter(context, remoteViews, appWidgetId)
 
//   remoteViews 
appWidgetManager.updateAppWidget(appWidgetId, remoteViews)
// collection view  
appWidgetManager.notifyAppWidgetViewDataChanged(
            appWidgetId,
            R.id.lvWidgetItems
        )
    }

рдПрдбреЙрдкреНрдЯрд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ред

private fun updateRemoteAdapter(context: Context, remoteViews: RemoteViews, appWidgetId: Int) {
//   RemoteViewsService   RemoteAdapter   
        val adapterIntent = Intent(context, StolotoAppWidgetRemoteViewsService::class.java).apply {
            putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
        }
        remoteViews.setRemoteAdapter(R.id.lvWidgetItems, adapterIntent)
// actionIntent  pendingIntent      
        val actionIntent = Intent(context, StolotoAppWidgetProvider::class.java).apply {
            action = WIDGET_CLICK_ACTION
            putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
        }
        val pendingIntent = PendingIntent.getBroadcast(
            context, 0, actionIntent,
            PendingIntent.FLAG_UPDATE_CURRENT
        )
// pendingIntent      
        remoteViews.setPendingIntentTemplate(R.id.lvWidgetItems, pendingIntent)
    }

рд╣рдо рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ, рд╕рд╛рдордЧреНрд░реА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП RemoteViewsService.RemoteViewsFactory рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд┐рд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

class StolotoAppWidgetRemoteViewsService : RemoteViewsService() {
    override fun onGetViewFactory(intent: Intent): RemoteViewsFactory =
        StolotoAppWidgetRemoteViewsFactory(
            this.applicationContext,
            intent
        )
}

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдбреЗрдкреНрдЯрд░ рдкрд░ рдПрдХ рдкрддрд▓реА рдЖрд╡рд░рдг рд╣реИред рдЙрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рджреВрд░рд╕реНрде рд╕рдВрдЧреНрд░рд╣ рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред RemoteViewsFactory рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП RemoteViews рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдореИрдВ рдЬреЛ рднреА рдХрд░рддрд╛ рд╣реВрдВ, рдЙрд╕рдореЗрдВ рд╕рдВрджрд░реНрдн рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред

рдЕрдЧрд▓рд╛, рдореБрдЦреНрдп рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж:

  1. onCreate - рдПрдбреЙрдкреНрдЯрд░ рдмрдирд╛рдирд╛ред
  2. getLoadingView - рд╡рд┐рдзрд┐ рд╡реНрдпреВ рдХреЛ рд╡рд╛рдкрд╕ рднреЗрдЬрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреА рд╣реИ, рдЬрд┐рд╕реЗ рд╕рд┐рд╕реНрдЯрдо рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ рдЬрдмрдХрд┐ рд╡реЗ рдмрдирд╛рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдХреБрдЫ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
  3. getViewAt - рд╡рд┐рдзрд┐ рд╕реВрдЪреА рдЖрдЗрдЯрдо рдмрдирд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреА рд╣реИред рдпрд╣рд╛рдБ RemoteViews рдХрд╛ рдорд╛рдирдХ рдЙрдкрдпреЛрдЧ рдЖрддрд╛ рд╣реИред
  4. рдЬрдм рд╕реВрдЪреА рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ onDataSetChanged рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдиред рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ, рд╣рдо рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рдзрд┐ рдХреЛ рднрд╛рд░реА, рд▓рдВрдмреЗ рдХреЛрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рддреЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  5. onDestroy рдХреЛ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЕрдВрддрд┐рдо рд╕реВрдЪреА рдЬреЛ рдХрд┐ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдПрдбрд╛рдкреНрдЯрд░ рдХреЛ рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИ (рдПрдХ рдПрдбрд╛рдкреНрдЯрд░ рдХреЛ рдХрдИ рд╕реВрдЪрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
  6. RemoteViewsFactory рд░рд╣рддрд╛ рд╣реИ рдЬрдмрдХрд┐ рд╕реВрдЪреА рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдЬреАрд╡рд┐рдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд░реНрддрдорд╛рди рдЖрдЗрдЯрдореЛрдВ рдХреА рд╕реВрдЪреАред

рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреА рдПрдХ рд╕реВрдЪреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ:

private val widgetItems = ArrayList<WidgetItem>()

рдПрдбреЗрдкреНрдЯрд░ рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдо рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рдореБрд╢реНрдХрд┐рд▓ рдХрд╛рд░реНрдп рдХреЛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдЪреБрдкрдЪрд╛рдк рдЪрд▓рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред

override fun onCreate() {
        updateDataSync()
}

рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рднреА рдЕрдкрдбреЗрдЯрдбреЗрдЯрд╛ рд╕рд┐рдВрдХ () рдХрд╣рддреЗ рд╣реИрдВ

   override fun onDataSetChanged() {
        updateDataSync()
    }

UpdateDataSync рдХреЗ рдЕрдВрджрд░, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рднреА рд╣реИред рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реВрдЪреА рдХреЛ рд╕рд╛рдл рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдФрд░ рдЧреЗрдо рдбреЗрдЯрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред

 private fun updateDataSync() {
        widgetItems.clear()
        updateProfileSync()
        updateGamesSync()
    }

рдпрд╣ рдпрд╣рд╛рдБ рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ

private fun updateProfileSync() {

рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рджрд┐рдЦрд╛рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдЬрд╛рдирдХрд╛рд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреА рд╣реЛрдЧреА:

val isUserFullAuth = isUserFullAuthInteractor
            .execute()
            .blockingGet()
        if (isUserFullAuth) {
            val profile = getWidgetProfileInteractor
                .execute()
                .onErrorReturn {
                    WidgetProfile()
//           
                }
                .blockingGet()

WidgetProfile рдореЙрдбрд▓ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдФрд░ рдЙрд╕рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдХреЗ рддрд░реНрдХ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд╡реЙрд▓реЗрдЯ рдореВрд▓реНрдп рдЙрдирдХреА рд░рд╕реАрдж рдХреЗ рд╕рд╛рде рдЧрд▓рдд рдбреЗрдЯрд╛ рдпрд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП, рд╡реЙрд▓реЗрдЯ рдбреЗрдЯрд╛ рдХреА рдХрдореА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдПрдХ рдЧрд▓рдд рд╡реЙрд▓реЗрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЙрдбрд▓ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдорджреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред

  if (profile.walletAmount >= 0L) {
                widgetItems.add(
                    WidgetItem.Profile(
                        wallet = profile.walletAmount.toMoneyFormat(),
                        waitingTickets = if (profile.waitingTicketsCount >= 0) profile.waitingTicketsCount.toString() else "",
                        unpaidPrizeAmount = if (profile.unpaidPrizeAmount >= 0) profile.unpaidPrizeAmoount.toMoneyFormat() else ""
                    )
                )
            }
        }
    }

UpdateGamesSync () рд╡рд┐рдзрд┐ getWidgetGamesInteractor рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рдФрд░ рд╡рд┐рдЬреЗрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЧреЗрдо рдХреЗ рд╕реЗрдЯ рдХреЛ рд╡рд┐рдЬреЗрдЯ рдЗрдЯреНрд╕ рд▓рд┐рд╕реНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рддреА рд╣реИред

рдХрд╛рд░реНрдб рдХреА рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╡рд┐рдЬреЗрдЯрдЯреИрдо рдореЙрдбрд▓ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рдХреЛрдЯрд▓рд┐рди рд╕реАрд▓ рдХреНрд▓рд╛рд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдореЙрдбрд▓ рдХреЛ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

sealed class WidgetItem {
 
    data class Profile(
        val wallet: String,
        val waitingTickets: String,
        val unpaidPrizeAmount: String
    ) : WidgetItem()
 
    data class Game(
        val id: String,
        val iconId: Int,
        val prizeValue: String,
        val date: String
    ) : WidgetItem()
}

RemoteViews рдмрдирд╛рдПрдБ рдФрд░ FillInIntent рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдирдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ

override fun getViewAt(position: Int): RemoteViews {
        return when (val item = widgetItems[position]) {
            is WidgetItem.Profile -> {
              RemoteViews(
                        context.packageName,
                        R.layout.item_widget_user_profile
                    ).apply {
                        setTextViewText(R.id.tvWidgetWalletMoney, item.wallet)
                        setTextViewText(R.id.tvWidgetUnpaidCount, item.unpaidPrizeAmount)
                        setTextViewText(R.id.tvWidgetWaitingCount, item.waitingTickets)
                        setOnClickFillInIntent(
                            R.id.llWidgetProfileWallet, Intent().putExtra(
                                StolotoAppWidgetProvider.KEY_PROFILE_OPTIONS,
                                StolotoAppWidgetProvider.VALUE_USER_WALLET
                            )
                        )
                        setOnClickFillInIntent(
                            R.id.llWidgetProfileUnpaid, Intent().putExtra(
                                StolotoAppWidgetProvider.KEY_PROFILE_OPTIONS,
                                StolotoAppWidgetProvider.VALUE_UNPAID_PRIZE
                            )
                        )
                        setOnClickFillInIntent(
                            R.id.llWidgetProfileWaiting, Intent().putExtra(
                                StolotoAppWidgetProvider.KEY_PROFILE_OPTIONS,
                                StolotoAppWidgetProvider.VALUE_WAITING_TICKETS
                            )
                        )
                    }
 
            is WidgetItem.Game -> {
                RemoteViews(
                    context.packageName,
                    R.layout.item_widget_game
                ).apply {
                    setImageViewResource(R.id.ivWidgetGame, item.iconId)
                    setTextViewText(R.id.tvWidgetGamePrize, item.prizeValue)
                    setTextViewText(R.id.tvWidgetGameDate, item.date)
                    setOnClickFillInIntent(
                        R.id.llWidgetGame, Intent().putExtra(
                            StolotoAppWidgetProvider.KEY_GAME_CLICK, item.id
                        )
                    )
                }
            }
        }
    }

SetOnClickFillInIntent рд╡рд┐рдзрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ viewId рдЖрд╢рдп рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ, рдЬреЛ рдЗрд╕ viewId рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЗрд░реЗрдВрдЯ рд▓рдВрдмрд┐рдд рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рд╣рдо рдЕрдкрдиреЗ WidgetProvider рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд▓рд┐рдХреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдиреБрдЕрд▓ рд╡рд┐рдЬреЗрдЯ рдЕрджреНрдпрддрди


рд╣рдорд╛рд░реЗ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд▓рд┐рдП рдЖрдзреЗ рдШрдВрдЯреЗ рдХрд╛ рдЕрдкрдбреЗрдЯ рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЖрдк рдЗрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдХрдореИрди рдХреЗ рд╕рд╛рде рдиреГрддреНрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдмреИрдЯрд░реА рдХреЛ рдХреНрдпреЛрдВ рд▓реЛрдб рдХрд░реЗрдВ? рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╢реБрд░реБрдЖрддреА рдЪрд░рдгреЛрдВ рдореЗрдВ рдРрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░реНрдпрд╛рдкреНрдд рд▓рдЧрддрд╛ рдерд╛ред

рдЬрдм рд╕рдм рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рдЬрдм "рд╡реНрдпрд╡рд╕рд╛рдп" рдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рдЬреЗрдЯ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ, рддреЛ рдЙрд╕ рдкрд░ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ: "рдпрд╣рд╛рдВ рдореЗрд░реЗ iPhone рдкрд░, рдореИрдВ рд╡рд┐рдЬреЗрдЯ рдЦреЛрд▓рддрд╛ рд╣реВрдВ рдФрд░ рдореЗрд░реА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕рдмрд╕реЗ рддрд╛рдЬрд╝рд╛ рдбреЗрдЯрд╛ рд╣реИред"

рд╕реНрдерд┐рддрд┐ рдЖрдо рд╣реИ: iOS рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдирдП рдХрд╛рд░реНрдб рдмрдирд╛рддрд╛ рд╣реИ рдкреНрд░рджрд░реНрд╢рди, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реНрдХреНрд░реАрди рд╣реИ, рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЗрд╡реЗрдВрдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдерд╛ рдХрд┐ рд╣рд░ 15 рдорд┐рдирдЯ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдХреБрдЫ рд▓реЙрдЯрд░реА рдЖрдпреЛрдЬрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд┐рдЬреЗрдЯ рдХреЛ рдЕрдк-рдЯреВ-рдбреЗрдЯ рдЬрд╛рдирдХрд╛рд░реА рджреЗрдиреА рдЪрд╛рд╣рд┐рдП - рдЖрдк рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рдбреНрд░рд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╣реА рдмреАрдд рдЪреБрдХрд╛ рд╣реИред

рдЗрд╕ рдЕрдкреНрд░рд┐рдп рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЕрджреНрдпрддрди рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕рдордп-рдкрд░реАрдХреНрд╖рдг рд╕рдорд╛рдзрд╛рди - "рдЕрдкрдбреЗрдЯ" рдмрдЯрди рдХреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ред

рдЗрд╕ рдмрдЯрди рдХреЛ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рд▓реЗрдЖрдЙрдЯ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЕрдкрдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ рдЬрдм рдЕрдкрдбреЗрдЯрд╡рд┐рдбрдЧ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

...
// Intent   AppWidgetManager.ACTION_APPWIDGET_UPDATE
val intentUpdate = Intent(context, StolotoAppWidgetProvider::class.java)
intentUpdate.action = AppWidgetManager.ACTION_APPWIDGET_UPDATE

//    
val ids = AppWidgetManager.getInstance(context)
   .getAppWidgetIds(ComponentName(context, StolotoAppWidgetProvider::class.java))
intentUpdate.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids)

//  intent  PendingIntent,  PendingIntent.getBroadcast()
val pendingUpdate = PendingIntent.getBroadcast(
   context,
   appWidgetId,
   intentUpdate,
   PendingIntent.FLAG_UPDATE_CURRENT
)
//  pendingIntent      тАШтАЩ
remoteViews.setOnClickPendingIntent(R.id.ivWidgetRefresh, pendingUpdate)
тАж

рдкрд╣рд▓реЗ рдШрдЯрдирд╛рдХреНрд░рдо рдиреЗ рдПрдХ рджреБрдЦрдж рддрд╕реНрд╡реАрд░ рджрд┐рдЦрд╛рдИ: "рдЕрдкрдбреЗрдЯ" рдмрдЯрди рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдкрдбреЗрдЯ рдореЗрдВ рджрдмрд╛рдиреЗ рд╕реЗ, рдХрдИ рд╕реЗрдХрдВрдб рдмреАрдд рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд┐рдЬреЗрдЯ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рд╣реИ рдФрд░ рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рдЙрдиред рдЬрдм рдЖрдк рд╣рдорд╛рд░реЗ рд╡рд┐рдЬреЗрдЯ рдХреЗ "рдЕрдкрдбреЗрдЯ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ:

  1. OnReceive рдкреНрд░рджрд╛рддрд╛ 'рдХрд╛рд░реНрд░рд╡рд╛рдИ' рдореЗрдВ рдЖрд╢рдп рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
  2. AppWidgetManager.ACTION_APPWIDGET_UPDATEред
  3. рдЗрд░рд╛рджреЗ-рдИ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рднреА widgetsIds рдХреЗ рд▓рд┐рдП onUpdate рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВред
  4. рдирдП рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдСрдирд▓рд╛рдЗрди рдЬрд╛рдПрдВред
  5. рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛ рддрд╛рдЬрд╝рд╛ рдХрд░реЗрдВ рдФрд░ рдирдП рд╕реВрдЪреА рдХрд╛рд░реНрдб рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред

рдирддреАрдЬрддрди, рд╡рд┐рдЬреЗрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд╣рдордиреЗ рдХреБрдЫ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╡рд┐рдЬреЗрдЯ рдХреЛ рджреЗрдЦрд╛ред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛ рдирд╣реАрдВред рджреГрд╢реНрдп рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВ?

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдЗрдВрдЯрд░рд╡рд░реНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реИрд╢реНрд╡рд┐рдХ рдкрд╣реБрдБрдЪ рдХреЗ рд╕рд╛рде isWidgetLoading рдзреНрд╡рдЬ рдЬреЛрдбрд╝рд╛ред рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рднреВрдорд┐рдХрд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рддрд╛рдЬрд╝рд╛ рдмрдЯрди рди рджрд┐рдЦрд╛рдПрдВ рдЬрдмрдХрд┐ рд╡рд┐рдЬреЗрдЯ рдбреЗрдЯрд╛ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИред

рджреВрд╕рд░реЗ, рдореИрдВрдиреЗ рдХрд╛рд░рдЦрд╛рдиреЗ рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдбрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рддреАрди рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

enum class LoadingStep {
   START,
   MIDDLE,
   END
}

рд╕реНрдЯрд╛рд░реНрдЯ - рдбрд╛рдЙрдирд▓реЛрдб рдХреА рд╢реБрд░реБрдЖрддред рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╕рднреА рдПрдбреЙрдкреНрдЯрд░ рджреГрд╢реНрдпреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдбрд╛рдЙрдирд▓реЛрдб рдзреНрд╡рдЬ "рд▓реЛрдбрд┐рдВрдЧ" рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред

MIDDLE - рдореБрдЦреНрдп рдбреЗрдЯрд╛ рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдЪрд░рдгред рдбрд╛рдЙрдирд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╡реИрд╢реНрд╡рд┐рдХ рдбрд╛рдЙрдирд▓реЛрдб рдзреНрд╡рдЬ рдХреЛ "рд▓реЛрдб" рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдПрдбреЗрдкреНрдЯрд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЕрдВрдд - рдбрд╛рдЙрдирд▓реЛрдб рдХрд╛ рдЕрдВрддред рдПрдбреЗрдкреНрдЯрд░ рдХреЛ рдЗрд╕ рдЪрд░рдг рдореЗрдВ рдПрдбреЗрдкреНрдЯрд░ рдбреЗрдЯрд╛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред WidgetProvider рдореЗрдВ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдЕрдкрдбреЗрдЯ рдЪрд░рдг рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЪрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрдЗрдП рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦреЗрдВ рдХрд┐ рдкреНрд░рджрд╛рддрд╛ рдореЗрдВ рдмрдЯрди рдЕрдкрдбреЗрдЯ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

if (isFullAuthorized && !widgetLoadingStateInteractor.isWidgetLoading) {
   remoteViews.setViewVisibility(R.id.ivWidgetRefresh, View.VISIBLE)
...
//     ,    
...   
} else {
   remoteViews.setViewVisibility(
       R.id.ivWidgetRefresh,
       if (isFullAuthorized) View.INVISIBLE else View.GONE //       .
   )
}

рдЕрдм рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдПрдбреЙрдкреНрдЯрд░ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:

private fun updateDataSync() {
   when (loadingStep) {
       START -> {
           widgetItems.forEach { it.isLoading = true }
           widgetLoadingStateInteractor.isWidgetLoading = true
           loadingStep = MIDDLE
           widgetManager.updateWidgets()
       }
       MIDDLE -> {
           widgetItems.clear()
           updateProfileSync()
           updateGamesSync()
           widgetLoadingStateInteractor.isWidgetLoading = false
           loadingStep = END
           widgetManager.updateWidgets()
       }
       END -> {
           loadingStep = START
       }
   }
}

рдЫрд╡рд┐

рдХрд╛рд░реНрдп рдХрд╛ рддрд░реНрдХ:

  1. START рдФрд░ MIDDLE рдЪрд░рдгреЛрдВ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдкреНрд░рджрд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рджреГрд╢реНрдп рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП updateWidgets рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВред
  2. START ┬л┬╗ , MIDDLE.
  3. MIDDLE, ┬л┬╗.
  4. MIDDLE, END.
  5. , END, ┬л┬╗. , END loadingStep START.



рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ, рдореИрдВ рд╡рд┐рдЬреЗрдЯ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП "рд╡реНрдпрд╡рд╕рд╛рдп" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдФрд░ рдЕрдХреНрд╕рд░ рдЕрджреНрдпрддрди рдХреЛ "рдЦреАрдВрдЪрдиреЗ" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдордЭреМрддрд╛ рдкрд░ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд▓реЗрдЦ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдерд╛ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ Android рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдерд╛, рддреЛ рд╣рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдмрддрд╛рдПрдВред

рд╕реМрднрд╛рдЧреНрдп

All Articles