diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 354df5dd0..d11fd12df 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -173,7 +173,7 @@ * If you quickly cycle between installing an app and uninstalling it, then * {@link App#installedApk} will still be null when - * {@link AppDetails2#startUninstall()} calls + * {@link AppDetailsActivity#startUninstall()} calls * this method. It is better to crash earlier here, before the {@link Intent} * is sent with a null {@link Apk} instance since this service is set to * receive Sticky Intents. That means they will automatically be resent diff --git a/app/src/main/java/org/fdroid/fdroid/privileged/views/AppSecurityPermissions.java b/app/src/main/java/org/fdroid/fdroid/privileged/views/AppSecurityPermissions.java index fc815ab08..e41bf35f1 100644 --- a/app/src/main/java/org/fdroid/fdroid/privileged/views/AppSecurityPermissions.java +++ b/app/src/main/java/org/fdroid/fdroid/privileged/views/AppSecurityPermissions.java @@ -434,7 +434,7 @@ public class AppSecurityPermissions { || ((pInfo.protectionLevel & PermissionInfo.PROTECTION_FLAG_PRE23) != 0); // Dangerous and normal permissions are always shown to the user - // this is matches the permission list in AppDetails2 + // this is matches the permission list in AppDetailsActivity if (isNormal || isDangerous) { return true; } diff --git a/app/src/main/java/org/fdroid/fdroid/AppDetails2.java b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsActivity.java similarity index 96% rename from app/src/main/java/org/fdroid/fdroid/AppDetails2.java rename to app/src/main/java/org/fdroid/fdroid/views/AppDetailsActivity.java index 27b2a343b..1d606c4fd 100644 --- a/app/src/main/java/org/fdroid/fdroid/AppDetails2.java +++ b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsActivity.java @@ -19,11 +19,13 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.fdroid.fdroid; +package org.fdroid.fdroid.views; +import android.annotation.TargetApi; import android.app.Activity; import android.app.PendingIntent; import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; @@ -31,6 +33,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.database.ContentObserver; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.support.annotation.Nullable; @@ -49,6 +52,11 @@ import android.view.ViewTreeObserver; import android.widget.Toast; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; +import org.fdroid.fdroid.AppUpdateStatusManager; +import org.fdroid.fdroid.FDroidApp; +import org.fdroid.fdroid.NfcHelper; +import org.fdroid.fdroid.R; +import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.data.Apk; import org.fdroid.fdroid.data.ApkProvider; import org.fdroid.fdroid.data.App; @@ -59,23 +67,24 @@ import org.fdroid.fdroid.installer.InstallManagerService; import org.fdroid.fdroid.installer.Installer; import org.fdroid.fdroid.installer.InstallerFactory; import org.fdroid.fdroid.installer.InstallerService; -import org.fdroid.fdroid.views.AppDetailsRecyclerViewAdapter; -import org.fdroid.fdroid.views.ShareChooserDialog; import org.fdroid.fdroid.views.apps.FeatureImage; import java.util.Iterator; -public class AppDetails2 extends AppCompatActivity +public class AppDetailsActivity extends AppCompatActivity implements ShareChooserDialog.ShareChooserDialogListener, AppDetailsRecyclerViewAdapter.AppDetailsRecyclerViewAdapterCallbacks { public static final String EXTRA_APPID = "appid"; - private static final String TAG = "AppDetails2"; + private static final String TAG = "AppDetailsActivity"; private static final int REQUEST_ENABLE_BLUETOOTH = 2; private static final int REQUEST_PERMISSION_DIALOG = 3; private static final int REQUEST_UNINSTALL_DIALOG = 4; + @SuppressWarnings("unused") + protected BluetoothAdapter bluetoothAdapter; + private FDroidApp fdroidApp; private App app; private RecyclerView recyclerView; @@ -111,6 +120,8 @@ public class AppDetails2 extends AppCompatActivity return; } + bluetoothAdapter = getBluetoothAdapter(); + localBroadcastManager = LocalBroadcastManager.getInstance(this); recyclerView = (RecyclerView) findViewById(R.id.rvDetails); @@ -254,7 +265,7 @@ public class AppDetails2 extends AppCompatActivity shareIntent.putExtra(Intent.EXTRA_TEXT, app.name + " (" + app.summary + ") - https://f-droid.org/app/" + app.packageName); - boolean showNearbyItem = app.isInstalled(getApplicationContext()) && fdroidApp.bluetoothAdapter != null; + boolean showNearbyItem = app.isInstalled(getApplicationContext()) && bluetoothAdapter != null; CoordinatorLayout coordinatorLayout = (CoordinatorLayout) findViewById(R.id.rootCoordinator); ShareChooserDialog.createChooser(coordinatorLayout, this, this, shareIntent, showNearbyItem); return true; @@ -531,7 +542,7 @@ public class AppDetails2 extends AppCompatActivity getString(R.string.install_error_notify_title), app.name); - AlertDialog.Builder alertBuilder = new AlertDialog.Builder(AppDetails2.this); + AlertDialog.Builder alertBuilder = new AlertDialog.Builder(AppDetailsActivity.this); alertBuilder.setTitle(title); alertBuilder.setMessage(errorMessage); alertBuilder.setNeutralButton(android.R.string.ok, null); @@ -584,7 +595,7 @@ public class AppDetails2 extends AppCompatActivity if (!TextUtils.isEmpty(errorMessage)) { Log.e(TAG, "uninstall aborted with errorMessage: " + errorMessage); - AlertDialog.Builder alertBuilder = new AlertDialog.Builder(AppDetails2.this); + AlertDialog.Builder alertBuilder = new AlertDialog.Builder(AppDetailsActivity.this); Uri uri = intent.getData(); if (uri == null) { alertBuilder.setTitle(getString(R.string.uninstall_error_notify_title, "")); @@ -656,7 +667,7 @@ public class AppDetails2 extends AppCompatActivity public void run() { String packageName = app != null ? app.packageName : null; if (!resetCurrentApp(packageName)) { - AppDetails2.this.finish(); + AppDetailsActivity.this.finish(); return; } AppDetailsRecyclerViewAdapter adapter = (AppDetailsRecyclerViewAdapter) recyclerView.getAdapter(); @@ -684,6 +695,16 @@ public class AppDetails2 extends AppCompatActivity NfcHelper.disableAndroidBeam(this); } + @TargetApi(18) + private BluetoothAdapter getBluetoothAdapter() { + // to use the new, recommended way of getting the adapter + // http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html + if (Build.VERSION.SDK_INT < 18) { + return BluetoothAdapter.getDefaultAdapter(); + } + return ((BluetoothManager) getSystemService(BLUETOOTH_SERVICE)).getAdapter(); + } + @Override public void openUrl(String url) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); diff --git a/app/src/main/java/org/fdroid/fdroid/views/RepoDetailsActivity.java b/app/src/main/java/org/fdroid/fdroid/views/RepoDetailsActivity.java index e3a47464a..365be25bd 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/RepoDetailsActivity.java +++ b/app/src/main/java/org/fdroid/fdroid/views/RepoDetailsActivity.java @@ -157,7 +157,7 @@ public class RepoDetailsActivity extends AppCompatActivity { LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver, new IntentFilter(UpdateService.LOCAL_ACTION_STATUS)); - // FDroid.java and AppDetails2 set different NFC actions, so reset here + // FDroid.java and AppDetailsActivity set different NFC actions, so reset here setNfc(); processIntent(getIntent()); } diff --git a/app/src/main/java/org/fdroid/fdroid/views/ScreenShotsActivity.java b/app/src/main/java/org/fdroid/fdroid/views/ScreenShotsActivity.java index 32f043208..e02201b48 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/ScreenShotsActivity.java +++ b/app/src/main/java/org/fdroid/fdroid/views/ScreenShotsActivity.java @@ -28,7 +28,7 @@ import org.fdroid.fdroid.data.AppProvider; * Full screen view of an apps screenshots to swipe through. This will always * download the image, even if the user has said not to use "unmetered" networks, * e.g. WiFi. That is because the user has to click on the thumbnail in - * {@link org.fdroid.fdroid.AppDetails2} in order to bring up this activity. + * {@link AppDetailsActivity} in order to bring up this activity. * That makes it a specific request for that image, rather than regular * background loading. */ diff --git a/app/src/main/java/org/fdroid/fdroid/views/ScreenShotsRecyclerViewAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/ScreenShotsRecyclerViewAdapter.java index d77bdc2df..66f48e29c 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/ScreenShotsRecyclerViewAdapter.java +++ b/app/src/main/java/org/fdroid/fdroid/views/ScreenShotsRecyclerViewAdapter.java @@ -14,7 +14,7 @@ import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.data.App; /** - * Loads and displays the small screenshots that are inline in {@link org.fdroid.fdroid.AppDetails2} + * Loads and displays the small screenshots that are inline in {@link AppDetailsActivity} */ class ScreenShotsRecyclerViewAdapter extends RecyclerView.Adapter { private final String[] screenshots; diff --git a/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java b/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java index 700684007..e8b124a77 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java +++ b/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java @@ -27,7 +27,7 @@ import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import com.nostra13.universalimageloader.core.ImageLoader; -import org.fdroid.fdroid.AppDetails2; +import org.fdroid.fdroid.views.AppDetailsActivity; import org.fdroid.fdroid.AppUpdateStatusManager; import org.fdroid.fdroid.AppUpdateStatusManager.AppUpdateStatus; import org.fdroid.fdroid.R; @@ -422,8 +422,8 @@ public abstract class AppListItemController extends RecyclerView.ViewHolder { return; } - Intent intent = new Intent(activity, AppDetails2.class); - intent.putExtra(AppDetails2.EXTRA_APPID, currentApp.packageName); + Intent intent = new Intent(activity, AppDetailsActivity.class); + intent.putExtra(AppDetailsActivity.EXTRA_APPID, currentApp.packageName); if (Build.VERSION.SDK_INT >= 21) { String transitionAppIcon = activity.getString(R.string.transition_app_item_icon); Pair iconTransitionPair = Pair.create((View) icon, transitionAppIcon); diff --git a/app/src/main/java/org/fdroid/fdroid/views/categories/AppCardController.java b/app/src/main/java/org/fdroid/fdroid/views/categories/AppCardController.java index fb72a3537..1fe5828c2 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/categories/AppCardController.java +++ b/app/src/main/java/org/fdroid/fdroid/views/categories/AppCardController.java @@ -21,7 +21,7 @@ import android.widget.TextView; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.FailReason; import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; -import org.fdroid.fdroid.AppDetails2; +import org.fdroid.fdroid.views.AppDetailsActivity; import org.fdroid.fdroid.R; import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.data.App; @@ -144,7 +144,7 @@ public class AppCardController extends RecyclerView.ViewHolder } /** - * When the user clicks/touches an app card, we launch the {@link AppDetails2} activity in response. + * When the user clicks/touches an app card, we launch the {@link AppDetailsActivity} activity in response. */ @Override public void onClick(View v) { @@ -152,8 +152,8 @@ public class AppCardController extends RecyclerView.ViewHolder return; } - Intent intent = new Intent(activity, AppDetails2.class); - intent.putExtra(AppDetails2.EXTRA_APPID, currentApp.packageName); + Intent intent = new Intent(activity, AppDetailsActivity.class); + intent.putExtra(AppDetailsActivity.EXTRA_APPID, currentApp.packageName); if (Build.VERSION.SDK_INT >= 21) { Pair iconTransitionPair = Pair.create((View) icon, activity.getString(R.string.transition_app_item_icon)); diff --git a/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java b/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java index b9f679eb5..089643b30 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java +++ b/app/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java @@ -41,7 +41,7 @@ import android.widget.Toast; import com.ashokvarma.bottomnavigation.BottomNavigationBar; import com.ashokvarma.bottomnavigation.BottomNavigationItem; import com.ashokvarma.bottomnavigation.TextBadgeItem; -import org.fdroid.fdroid.AppDetails2; +import org.fdroid.fdroid.views.AppDetailsActivity; import org.fdroid.fdroid.AppUpdateStatusManager; import org.fdroid.fdroid.AppUpdateStatusManager.AppUpdateStatus; import org.fdroid.fdroid.BuildConfig; @@ -184,7 +184,7 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationB setSelectedMenuInNav(); } - // AppDetails2 and RepoDetailsActivity set different NFC actions, so reset here + // AppDetailsActivity and RepoDetailsActivity set different NFC actions, so reset here NfcHelper.setAndroidBeam(this, getApplication().getPackageName()); checkForAddRepoIntent(getIntent()); } @@ -309,8 +309,8 @@ public class MainActivity extends AppCompatActivity implements BottomNavigationB if (!TextUtils.isEmpty(packageName)) { Utils.debugLog(TAG, "FDroid launched via app link for '" + packageName + "'"); - Intent intentToInvoke = new Intent(this, AppDetails2.class); - intentToInvoke.putExtra(AppDetails2.EXTRA_APPID, packageName); + Intent intentToInvoke = new Intent(this, AppDetailsActivity.class); + intentToInvoke.putExtra(AppDetailsActivity.EXTRA_APPID, packageName); startActivity(intentToInvoke); finish(); } else if (!TextUtils.isEmpty(query)) { diff --git a/app/src/main/res/layout/app_details2.xml b/app/src/main/res/layout/app_details2.xml index 86ca16e44..108f24621 100644 --- a/app/src/main/res/layout/app_details2.xml +++ b/app/src/main/res/layout/app_details2.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" - tools:context="org.fdroid.fdroid.AppDetails2" + tools:context="org.fdroid.fdroid.views.AppDetailsActivity" android:background="?attr/appDetailsBackground" android:id="@+id/rootCoordinator"> @@ -52,7 +52,7 @@ android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" app:layoutManager="LinearLayoutManager" - tools:context="org.fdroid.fdroid.AppDetails2" + tools:context="org.fdroid.fdroid.views.AppDetailsActivity" tools:showIn="@layout/app_details2" />