diff --git a/app/src/full/java/org/fdroid/fdroid/views/swap/SwapSuccessView.java b/app/src/full/java/org/fdroid/fdroid/views/swap/SwapSuccessView.java index 5fd5ac97d..141d9f395 100644 --- a/app/src/full/java/org/fdroid/fdroid/views/swap/SwapSuccessView.java +++ b/app/src/full/java/org/fdroid/fdroid/views/swap/SwapSuccessView.java @@ -41,6 +41,7 @@ import org.fdroid.fdroid.data.App; import org.fdroid.fdroid.data.AppProvider; import org.fdroid.fdroid.data.Repo; import org.fdroid.fdroid.data.Schema.AppMetadataTable; +import org.fdroid.fdroid.installer.InstallManagerService; import org.fdroid.fdroid.localrepo.SwapView; import org.fdroid.fdroid.net.Downloader; import org.fdroid.fdroid.net.DownloaderService; @@ -210,7 +211,6 @@ public class SwapSuccessView extends SwapView implements LoaderManager.LoaderCal default: throw new RuntimeException("intent action not handled!"); } - } }; @@ -261,6 +261,25 @@ public class SwapSuccessView extends SwapView implements LoaderManager.LoaderCal resetView(); } + private final OnClickListener cancelListener = new OnClickListener() { + @Override + public void onClick(View v) { + if (apk != null) { + InstallManagerService.cancel(getContext(), apk.getCanonicalUrl()); + } + } + }; + + private final OnClickListener installListener = new OnClickListener() { + @Override + public void onClick(View v) { + if (apk != null && (app.hasUpdates() || app.compatible)) { + getActivity().install(app, apk); + showProgress(); + } + } + }; + private void resetView() { if (app == null) { @@ -279,6 +298,7 @@ public class SwapSuccessView extends SwapView implements LoaderManager.LoaderCal if (app.hasUpdates()) { btnInstall.setText(R.string.menu_upgrade); btnInstall.setVisibility(View.VISIBLE); + btnInstall.setOnClickListener(installListener); statusIncompatible.setVisibility(View.GONE); statusInstalled.setVisibility(View.GONE); } else if (app.isInstalled(getContext())) { @@ -289,29 +309,26 @@ public class SwapSuccessView extends SwapView implements LoaderManager.LoaderCal btnInstall.setVisibility(View.GONE); statusIncompatible.setVisibility(View.VISIBLE); statusInstalled.setVisibility(View.GONE); + } else if (progressView.getVisibility() == View.VISIBLE) { + btnInstall.setText(R.string.cancel); + btnInstall.setVisibility(View.VISIBLE); + btnInstall.setOnClickListener(cancelListener); + statusIncompatible.setVisibility(View.GONE); + statusInstalled.setVisibility(View.GONE); } else { btnInstall.setText(R.string.menu_install); btnInstall.setVisibility(View.VISIBLE); + btnInstall.setOnClickListener(installListener); statusIncompatible.setVisibility(View.GONE); statusInstalled.setVisibility(View.GONE); } - - OnClickListener installListener = new OnClickListener() { - @Override - public void onClick(View v) { - if (apk != null && (app.hasUpdates() || app.compatible)) { - getActivity().install(app, apk); - showProgress(); - } - } - }; - - btnInstall.setOnClickListener(installListener); } private void showProgress() { + btnInstall.setText(R.string.cancel); + btnInstall.setVisibility(View.VISIBLE); + btnInstall.setOnClickListener(cancelListener); progressView.setVisibility(View.VISIBLE); - btnInstall.setVisibility(View.GONE); statusInstalled.setVisibility(View.GONE); statusIncompatible.setVisibility(View.GONE); } diff --git a/app/src/full/res/layout/swap_app_list_item.xml b/app/src/full/res/layout/swap_app_list_item.xml index cbe716ff7..0a8261475 100644 --- a/app/src/full/res/layout/swap_app_list_item.xml +++ b/app/src/full/res/layout/swap_app_list_item.xml @@ -82,14 +82,14 @@ android:layout_height="wrap_content" android:indeterminate="true" style="?android:attr/progressBarStyleHorizontal" - android:layout_toEndOf="@android:id/icon" android:paddingStart="5dp" android:paddingLeft="5dp" android:paddingEnd="5dp" android:paddingRight="5dp" + android:layout_toEndOf="@android:id/icon" android:layout_toRightOf="@android:id/icon" - android:layout_alignParentRight="true" - android:layout_alignParentEnd="true" + android:layout_toStartOf="@+id/button_or_text" + android:layout_toLeftOf="@+id/button_or_text" android:layout_below="@+id/name" />