1111import android .content .pm .PackageManager ;
1212import android .os .Build ;
1313import android .os .Bundle ;
14- import android .view .LayoutInflater ;
1514import android .view .View ;
16- import android .view .ViewGroup ;
1715
1816import androidx .activity .result .ActivityResultLauncher ;
1917import androidx .activity .result .contract .ActivityResultContracts ;
2018import androidx .annotation .NonNull ;
2119import androidx .annotation .Nullable ;
2220import androidx .annotation .RequiresApi ;
23- import androidx .fragment .app .Fragment ;
21+ import androidx .lifecycle .Lifecycle ;
22+ import androidx .lifecycle .LifecycleOwner ;
2423import androidx .lifecycle .ViewModelProvider ;
2524import androidx .localbroadcastmanager .content .LocalBroadcastManager ;
2625
2726import org .apache .commons .io .FileUtils ;
2827
2928import java .io .IOException ;
3029
30+ import de .davis .passwordmanager .App ;
3131import de .davis .passwordmanager .PasswordManagerApplication ;
3232import de .davis .passwordmanager .R ;
33- import de .davis .passwordmanager .databinding .FragmentUpdaterBinding ;
3433import de .davis .passwordmanager .ui .viewmodels .UpdaterViewModel ;
3534import de .davis .passwordmanager .updater .Updater ;
3635import de .davis .passwordmanager .updater .downloader .DownloadService ;
3736import de .davis .passwordmanager .updater .exception .RateLimitException ;
3837import de .davis .passwordmanager .updater .installer .InstallBroadcastReceiver ;
39- import de .davis .passwordmanager .updater .version .CurrentVersion ;
4038import de .davis .passwordmanager .updater .version .Release ;
4139import de .davis .passwordmanager .utils .PreferenceUtil ;
4240import de .davis .passwordmanager .utils .VersionUtil ;
4341
44- public class UpdaterFragment extends Fragment {
42+ public class VersionFragment extends BaseVersionFragment {
4543
46- private FragmentUpdaterBinding binding ;
4744 private UpdaterViewModel viewModel ;
4845
4946 private String scanDownload ;
@@ -89,7 +86,7 @@ public void onReceive(Context context, Intent intent) {
8986 release .getVersionTag ()));
9087
9188 try {
92- FileUtils .deleteDirectory (((PasswordManagerApplication )requireActivity ()
89+ FileUtils .deleteDirectory (((App )requireActivity ()
9390 .getApplication ()).getDownloadDir ());
9491 } catch (IOException ignore ) {}
9592 }
@@ -125,75 +122,10 @@ public void onReceive(Context context, Intent intent) {
125122 }
126123 };
127124
128- private final ActivityResultLauncher <String > requestPermissionLauncher =
125+ private ActivityResultLauncher <String > requestPermissionLauncher =
129126 registerForActivityResult (new ActivityResultContracts .RequestPermission (),
130127 isGranted -> permissionsRequested ());
131128
132- @ Override
133- public View onCreateView (@ NonNull LayoutInflater inflater , ViewGroup container , Bundle savedInstanceState ) {
134- binding = FragmentUpdaterBinding .inflate (inflater , container , false );
135- return binding .getRoot ();
136- }
137-
138- @ Override
139- public void onViewCreated (@ NonNull View view , @ Nullable Bundle savedInstanceState ) {
140- super .onViewCreated (view , savedInstanceState );
141-
142- updater = ((PasswordManagerApplication )requireActivity ().getApplication ()).getUpdater ();
143- viewModel = new ViewModelProvider (requireActivity ()).get (UpdaterViewModel .class );
144-
145- if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .TIRAMISU ) {
146- askForNotificationPermission ();
147- }
148-
149- scanDownload = getString (R .string .download );
150-
151- binding .autoComplete .setText (VersionUtil .getChannelName (PreferenceUtil .getUpdateChannel (requireContext ()), requireContext ()), false );
152- binding .autoComplete .setOnItemClickListener ((parent , view1 , position , id ) -> {
153- PreferenceUtil .putUpdateChannel (requireContext (),
154- VersionUtil .getChannelByName ((String ) parent .getItemAtPosition (position ), requireContext ()));
155- fetch (false );
156- });
157-
158- binding .build .setInformationText (CurrentVersion .getInstance ().getVersionTag ());
159- binding .channel .setInformationText (VersionUtil .getChannelName (CurrentVersion .getInstance ().getChannel (), requireContext ()));
160-
161- viewModel .getErrorLiveData ().observe (getViewLifecycleOwner (), e -> {
162- binding .progressBar .setVisibility (View .GONE );
163- if (e instanceof RateLimitException ){
164- binding .scan .setEnabled (false );
165- binding .scan .setText (getString (R .string .try_in_x_seconds ,
166- (((RateLimitException ) e ).getReset () - System .currentTimeMillis () / 1000 )));
167- binding .update .setInformationText (R .string .gh_api_limit_exceeded );
168- return ;
169- }
170-
171- binding .update .setInformationText (e .getMessage ());
172- });
173-
174- IntentFilter filter = new IntentFilter ();
175- filter .addAction (DownloadService .ACTION_START );
176- filter .addAction (DownloadService .ACTION_DESTROY );
177- filter .addAction (DownloadService .ACTION_PROGRESS );
178- filter .addAction (InstallBroadcastReceiver .ACTION_INSTALL );
179-
180- LocalBroadcastManager .getInstance (requireContext ()).registerReceiver (broadcastReceiver , filter );
181- }
182-
183- @ Override
184- public void onStart () {
185- super .onStart ();
186-
187- ((PasswordManagerApplication )requireActivity ().getApplication ())
188- .setShouldAuthenticate (true );
189- }
190-
191- @ Override
192- public void onDestroyView () {
193- super .onDestroyView ();
194- LocalBroadcastManager .getInstance (requireContext ()).unregisterReceiver (broadcastReceiver );
195- }
196-
197129 @ RequiresApi (api = Build .VERSION_CODES .TIRAMISU )
198130 private void askForNotificationPermission (){
199131 if (requireContext ().checkSelfPermission (Manifest .permission .POST_NOTIFICATIONS )
@@ -202,6 +134,7 @@ private void askForNotificationPermission(){
202134 return ;
203135 }
204136
137+ ((PasswordManagerApplication )requireActivity ().getApplication ()).setShouldAuthenticate (false );
205138 requestPermissionLauncher .launch (Manifest .permission .POST_NOTIFICATIONS );
206139 }
207140
@@ -271,7 +204,7 @@ private void startFetchingIfNeeded(){
271204 return ;
272205 }
273206
274- if (release .getDownloadedFile ((PasswordManagerApplication ) requireActivity ().getApplication ()).isFile ()){
207+ if (release .getDownloadedFile ((App ) requireActivity ().getApplication ()).isFile ()){
275208 prepareUiForInstallation (release );
276209 return ;
277210 }
@@ -287,4 +220,58 @@ private void fetch(boolean useCached){
287220 binding .scan .setEnabled (false );
288221 viewModel .fetchGitHubReleases (PreferenceUtil .getUpdateChannel (requireContext ()), useCached );
289222 }
223+
224+ @ Override
225+ public void onDestroy () {
226+ super .onDestroy ();
227+ LocalBroadcastManager .getInstance (requireContext ()).unregisterReceiver (broadcastReceiver );
228+ }
229+
230+ @ Override
231+ public void onStart () {
232+ super .onStart ();
233+ ((PasswordManagerApplication ) requireActivity ().getApplication ()).setShouldAuthenticate (true );
234+ }
235+
236+ @ Override
237+ public void onViewCreated (@ NonNull View view , @ Nullable Bundle savedInstanceState ) {
238+ super .onViewCreated (view , savedInstanceState );
239+
240+ updater = ((App )requireActivity ().getApplication ()).getUpdater ();
241+ viewModel = new ViewModelProvider (requireActivity ()).get (UpdaterViewModel .class );
242+
243+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .TIRAMISU ) {
244+ askForNotificationPermission ();
245+ }
246+
247+ scanDownload = getString (R .string .download );
248+
249+ binding .autoComplete .setText (VersionUtil .getChannelName (PreferenceUtil .getUpdateChannel (requireContext ()), requireContext ()), false );
250+ binding .autoComplete .setOnItemClickListener ((parent , view1 , position , id ) -> {
251+ PreferenceUtil .putUpdateChannel (requireContext (),
252+ VersionUtil .getChannelByName ((String ) parent .getItemAtPosition (position ), requireContext ()));
253+ fetch (false );
254+ });
255+
256+ viewModel .getErrorLiveData ().observe (getViewLifecycleOwner (), e -> {
257+ binding .progressBar .setVisibility (View .GONE );
258+ if (e instanceof RateLimitException ){
259+ binding .scan .setEnabled (false );
260+ binding .scan .setText (getString (R .string .try_in_x_seconds ,
261+ (((RateLimitException ) e ).getReset () - System .currentTimeMillis () / 1000 )));
262+ binding .update .setInformationText (R .string .gh_api_limit_exceeded );
263+ return ;
264+ }
265+
266+ binding .update .setInformationText (e .getMessage ());
267+ });
268+
269+ IntentFilter filter = new IntentFilter ();
270+ filter .addAction (DownloadService .ACTION_START );
271+ filter .addAction (DownloadService .ACTION_DESTROY );
272+ filter .addAction (DownloadService .ACTION_PROGRESS );
273+ filter .addAction (InstallBroadcastReceiver .ACTION_INSTALL );
274+
275+ LocalBroadcastManager .getInstance (requireContext ()).registerReceiver (broadcastReceiver , filter );
276+ }
290277}
0 commit comments