809 Commits

Author SHA1 Message Date
Daniel Martí
5f27b65a92 Remove duplicate ICON_URL values.put() line 2015-06-08 23:53:51 +02:00
Daniel Martí
ab7067f247 Also bundle repo versions in the client
Without them, some features like proper density icons only worked after the
first update, but not on the first index update itself since the version
defaulted to 0.
2015-06-08 23:53:07 +02:00
Daniel Martí
3b962b7546 Bump to 0.92 with changelog 2015-06-08 17:06:27 +02:00
Dominik Schürmann
2e6984bfbe Use new icon for install into system notifications 2015-06-08 16:34:04 +02:00
Peter Serwylo
c6bc8b5e37 Merge branch 'material-design' into swap-demolition-material 2015-06-04 08:26:46 +10:00
Peter Serwylo
f9bcf33d50 WIP: Fixed minor UI issues.
"Confirm swap" background was white but should have been blue.

SwapWorkflowActivity now extends ActionBarActivity instead of
FragmentActivity so older devices have an action bar (though it is
not styled with blue action buttons on android-10 devices).
2015-06-03 23:55:11 +10:00
Peter Serwylo
d9f91da9a6 WIP: Added logging, removed dead code, fixed minor bugs.
Logging to help understand when the service is started, stopped,
restarted, and when individual components (e.g. web server, bonjour)
are started/stopped.

Fixed bug where service was moved to foreground during "restartIfEnabled"
because that is unneccesary if it is already in the foreground.
2015-06-03 23:41:51 +10:00
Peter Serwylo
2553b8520c WIP: Move swap starting/stopping to async task.
There is now a private [en|dis]ableSwappingSynchronous() method, to go
along with the public [en|dis]ableSwapping() method. The public method
knows about not spinning up tasks if already enabled, and also about
pushing the invocation to a background task. The private method just
blindly does what it is asked, without checking if it should be done,
and without running on a background task.

The same goes for the restartIfEnabled() method, it is responsible for
creating a single background task which runs in order: disable, and
then enable. This is actually the reason for having the synchronous
methods, rather than having, e.g., the public [en|dis]ableSwapping()
method know about threads. If that was the case, then restarting would
consist of starting, waiting for some form of notification that the
background task has completed, and then scheduling the enable task.
Now, it is a matter of calling both *SwappingSynchronous methods in
succession.
2015-06-03 17:55:36 +10:00
Peter Serwylo
7c9492e6b4 WIP: Refactoring swap service.
Removed LocalRepoService, replaced with SwapService.

Still TODO:
  Manage threads. Currently everything is called from the
  UI thread, which is a regression from the previous behaviour.
  I'd like to manage this so that the code interacting with the
  SwapManager doesn't need to bother itself with whether it is calling
  from the UI thread or not.

The local repo service had many different methods and properties for
dealing with starting and stopping various things (webserver, bonjour,
in the future it will also need to know about bluetooth and Wifi AP).

The SwapService handles this stuff by delegating to specific classes
that are only responsible for one of these. Hopefully this will make
the process of enabling and disabling swap repos easier to reason
about.

The local repo service was also stopped and started quite regularly.
This meant it was up to the code making use of the service to know if
it was running or not, and to enable it if required.
The new SwapService is only started once (when the singleton
SwapManager is created for the first time). It should not use any more
resources, because it is a background service most the time, and it
is responsible for moving itself to the foreground when required (the
burden is not on the code consuming this service to know when to do
this).

By having the service running more often, it doesn't need to'
continually figure out if it  needs to register or unregister listeners
for various properties (e.g. https enabled) or wifi broadcasts. The
listeners can stay active, and do nothing once notified if swapping is
not enabled.

Moved the timeout timer (which cancels the swap service after 15 mins)
into the SwapService, rather than being managed by the
SwapWorkflowActivity. Seems more appropriate for the service to know to
time itself out rather than the Activity, seeing as the Activity can
die and get GC'ed while the service is still running.

Finally, although there is nothing stopping code in F-Droid from
talking to the service directly, it is now handled by the SwapManager
singleton. This means that details such as using a Messenger or Handler
object in order to communicate via arg1 and arg2 is no longer required,
and instead methods with proper type signatures can be used. This is
similar (but not exactly the same) to how Android system services work.
That is, ask for a "Manager" object using getSystemService(), and then
use that to perform functionality and query state via that object,
which delegates to the service. Then we get the best of both worlds:

 * Reasonable and type safe method signatures
 * Services that are not tied to activity lifecycles, which persist
   beyond the closing of the swap activity.
2015-06-02 00:18:37 +10:00
Daniel Martí
9795b31b69 Add missing language code for Sardinian in the settings
Closes #272
2015-05-30 12:19:39 +02:00
Daniel Martí
578a98250b Add script to detect missing language codes in the settings
This will prevent future issues like #272
2015-05-30 12:19:25 +02:00
Daniel Martí
38ab8ac353 Don't add count=-1 to bytesRead when finished 2015-05-30 00:51:35 +02:00
Daniel Martí
29403c1d84 Use KiB for progress in apk downloads
Quick improvement for #270, but a proper solution would be more complex to
also do MiB when appropriate. It would probably involve a modified
ProgressDialog.
2015-05-29 23:39:28 +02:00
Daniel Martí
d70fd02178 Hide more debug logs from release builds 2015-05-29 17:00:08 +02:00
Daniel Martí
02ed2293e6 Make "failed" log messages be warnings, not debugs 2015-05-29 16:59:40 +02:00
Daniel Martí
35f9900101 Update UIL to 1.9.4 2015-05-29 12:34:02 +02:00
Peter Serwylo
0e16eae5bc Minor fixes to swap after refactor.
List views need to have their header view set _before_ an adapter is
assigned to them.

Was incorrectly passing an application context instead of an Activity
context to the progress dialog for swap.

Extend ActionBarActivity rather than FragmentActivity.

Don't persist swap workflow state to disk, only store it in the
singleton.
2015-05-28 23:34:03 +10:00
Peter Serwylo
ea61e8f2d3 Organised SwapState class, moved methods around to make more sense.
Put all of the step handling code in one place, added some comments to
make sense of the different parts of the claass and their
responsibilities.
2015-05-25 16:20:56 +10:00
Peter Serwylo
c26c6b9e89 Removed old SwapActivity + Fragments.
All the code from the activity and the fragments has been successfully
ported to the SwapWorkflowActivity + Views. Thus, the code is no longer
useful, as it was only kept over the previous WIP commits so that it
can be referred to to help re-implement fragments with views.
2015-05-25 16:07:49 +10:00
Peter Serwylo
f325e9d057 WIP: Moved start/stop local repo code from static FDroidApp to SwapState
Didn't change any behaviour, but wanted to start unifying swap state
management in one location.
2015-05-25 08:39:31 +10:00
Peter Serwylo
68c6648da5 WIP: Store selected apps in SwapState. Handle back presses for swap.
Currently the view to show after pressing the back button is defined
by individual InnerView classes. For example, the JoinWifiView always
says its previous step is the SelectAppsView. This works for the most
part, but doesn't work for:

 * The first StartSwapView class (instead handled by a special case in
   the Activity).

 * WifiQrView which could either be going back to the NfcView or the
   JoinWifiView, depending on a few cases, which the WifiQrView probably
   shouldn't care about.
2015-05-25 08:17:09 +10:00
Peter Serwylo
38059ec324 WIP: Initial state handling for swap process.
The state is saved to a preference file, but that is abstracted from
the SwapWorkflowActivity. It interacts with a SwapState object, which
is relatively safe in that you should not be able to save it into an
invalid state.

Note: At this point it is not tied to any service. I'm not sure it will
ever have to be either, as the service needs to persist state somewhere
anyway, so that will probably also end up saving to a preferences file
too.
2015-05-23 13:17:33 +10:00
Peter Serwylo
1b2678d6ed WIP: Applying styles correctly to views refactored from fragments. 2015-05-23 01:25:06 +10:00
Peter Serwylo
38eafdeedd WIP: Refactored wifi QR fragment into view.
As per the select apps list, there is quite a bit of business logic
in this class, which is now spread between the activity and the view.
The activity needs to handle some stuff, because the zxing library
routes intents to either an activity or a fragment.
2015-05-23 01:11:16 +10:00
Peter Serwylo
97994c5e43 WIP: Refactored NFC fragment to view. 2015-05-23 00:55:39 +10:00
Peter Serwylo
1fd6e447af WIP: Refactored join wifi fragment into view.
There is quite a lot of business logic that was moved directly from
the fragment to the view. Before this feature is complete, that logic
should either be moved into the activity, or into some sort of
associated Presenter class for the JoinWifiView.
2015-05-23 00:46:40 +10:00
Peter Serwylo
4f7f7b2cb5 WIP: Refactored select apps to swap into view.
Not worrying about styling yet, just functionality. Added an InnerView
interface that these views can implement. Currently it asks them to
populate the menu. It may be slightly inefficient if we end up with a
popup menu, because it is called onPrepareOptionsMenu, but expects the
inner view to inflate the menu. However, for swap this shouldn't be an
issue, as all the menus pretty much fit in the action bar of most screen
sizes.
2015-05-23 00:10:50 +10:00
Peter Serwylo
b6415dadb4 WIP: Refactored start swap fragment into a view.
Added a SwapWorkflowActivity to re-implement the SwapActivity.
Once all the fragments have been refactored into views, then the
SwapActivity will be removed.
2015-05-23 00:10:07 +10:00
Dominik Schürmann
29c1aaf33c Touch instead of Click 2015-05-21 00:07:23 +02:00
Dominik Schürmann
767db8a598 Improve system install process by killing FDroid to prevent hanging, cleanup dialog builders 2015-05-20 23:56:50 +02:00
Peter Serwylo
f298ed7156 Merge branch 'fix-263/explicitly-add-swap-repo' into integration 2015-05-21 07:52:35 +10:00
Peter Serwylo
3aac399456 Merge branch 'fix-267/nfc-swap' into integration 2015-05-21 07:52:10 +10:00
Dominik Schürmann
fc631c8781 Better strings for system installer, cleanup 2015-05-20 23:27:57 +02:00
Dominik Schürmann
b393befb70 Implement notification for install into system feature 2015-05-20 21:59:24 +02:00
Dominik Schürmann
2befa22b2c Remove uneeded case of no new permissions in InstallConfirmActivity 2015-05-20 21:59:24 +02:00
Dominik Schürmann
f48236deb9 Do not show install confirm activity if there are no new permissions, externalize app diff for this functionality 2015-05-20 21:59:24 +02:00
Dominik Schürmann
62a4d58756 Use right theme in InstallConfirmActivity, cleanup 2015-05-20 21:59:24 +02:00
Daniel Martí
8e62d9ae7e Add install confirm+perms screen to SystemInstaller 2015-05-20 21:59:24 +02:00
Daniel Martí
6e89a55879 Add confirmation dialog to uninstalling via SystemInstaller 2015-05-20 21:56:45 +02:00
Dominik Schürmann
a7aa554f66 Remove root installer 2015-05-20 21:56:45 +02:00
Dominik Schürmann
51b2aeda1a Rename for consistency 2015-05-20 21:56:45 +02:00
Dominik Schürmann
03b7f59dce Add missing chmod command 2015-05-20 21:56:45 +02:00
Dominik Schürmann
709bd9d699 Simplify subclass changes, fix mkdir missing on lollipop 2015-05-20 21:56:45 +02:00
Peter Serwylo
4775c17653 Refactored system app converter into classes.
The multiple occurances of "if (Build.SDK_INT < ... )" statements
hint at the prospect that there are a couple of different implementations
of this class which behave differently. The new classes start with
InstallFDroidAsSystem, and then there are SDK specific subclasses
which provide the customization relevant for those subclasses.
2015-05-20 21:56:44 +02:00
Dominik Schürmann
c27d8f6287 Enable system installer directly on first start if FDroid is a system-app 2015-05-20 21:56:44 +02:00
Dominik Schürmann
dbbad1c95c Finish transparent activity on dialog cancels 2015-05-20 21:56:44 +02:00
Dominik Schürmann
f328a9de5e Install F-Droid as system-app via root access 2015-05-20 21:56:44 +02:00
Dominik Schürmann
9f7536a926 Allow downgrade via root installer 2015-05-20 21:56:44 +02:00
Dominik Schürmann
198c9fbaff Remove deprecated superuser permission, see https://plus.google.com/+Chainfire/posts/Ka3ujLb4bJu 2015-05-20 21:56:44 +02:00
Daniel Martí
8fd1bc39f3 Remove unused reset() from Hasher 2015-05-20 19:05:24 +02:00