diff --git a/res/layout-v11/select_local_apps_list_item.xml b/res/layout-v11/select_local_apps_list_item.xml
new file mode 100644
index 000000000..827625b3c
--- /dev/null
+++ b/res/layout-v11/select_local_apps_list_item.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/res/layout/applistitem.xml b/res/layout/applistitem.xml
index 793e46319..d37feaa7d 100644
--- a/res/layout/applistitem.xml
+++ b/res/layout/applistitem.xml
@@ -1,28 +1,32 @@
+ android:minHeight="?android:attr/listPreferredItemHeight"
+ android:paddingBottom="2dip"
+ android:paddingTop="2dip" >
@@ -54,8 +58,8 @@
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginLeft="8dp"
- android:layout_marginStart="8dp"
+ android:layout_marginLeft="?attr/listPreferredItemPaddingLeft"
+ android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
android:layout_gravity="center_vertical"
android:gravity="end"
android:textAlignment="viewEnd"
@@ -89,8 +93,8 @@
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginLeft="6sp"
- android:layout_marginStart="6sp"
+ android:layout_marginLeft="?attr/listPreferredItemPaddingLeft"
+ android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
android:layout_gravity="center_vertical"
android:gravity="end"
android:textAlignment="viewEnd"
diff --git a/res/layout/select_local_apps_list_item.xml b/res/layout/select_local_apps_list_item.xml
index 895d3a3a1..36e5a7bf3 100644
--- a/res/layout/select_local_apps_list_item.xml
+++ b/res/layout/select_local_apps_list_item.xml
@@ -16,19 +16,15 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="?android:attr/activatedBackgroundIndicator"
- android:minHeight="?android:attr/listPreferredItemHeight"
+ android:minHeight="?attr/listPreferredItemHeight"
android:paddingBottom="2dip"
- android:paddingTop="2dip"
- tools:ignore="NewApi" >
-
-
+ android:paddingTop="2dip" >
@@ -41,16 +37,17 @@
android:id="@+id/application_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginLeft="?android:attr/listPreferredItemPaddingLeft"
- android:layout_marginStart="?android:attr/listPreferredItemPaddingLeft"
+ android:layout_marginLeft="?attr/listPreferredItemPaddingLeft"
+ android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
android:layout_marginTop="6dip"
- android:textAppearance="?android:attr/textAppearanceListItem" />
+ android:textAppearance="?android:attr/textAppearanceMedium" />
diff --git a/res/menu/local_repo_activity.xml b/res/menu/local_repo_activity.xml
index b81b2a670..606090278 100644
--- a/res/menu/local_repo_activity.xml
+++ b/res/menu/local_repo_activity.xml
@@ -1,20 +1,21 @@
-
\ No newline at end of file
diff --git a/res/menu/select_local_apps_action_mode.xml b/res/menu/select_local_apps_action_mode.xml
index 5c09264f4..f0c9bc6f1 100644
--- a/res/menu/select_local_apps_action_mode.xml
+++ b/res/menu/select_local_apps_action_mode.xml
@@ -1,14 +1,17 @@
-
+
+
+ android:title="@string/menu_search"
+ app:actionViewClass="android.support.v7.widget.SearchView"
+ app:showAsAction="ifRoom"/>
+ android:title="@string/update_repo"
+ app:showAsAction="always"/>
\ No newline at end of file
diff --git a/res/menu/select_local_apps_activity.xml b/res/menu/select_local_apps_activity.xml
index 98a321135..172e907bf 100644
--- a/res/menu/select_local_apps_activity.xml
+++ b/res/menu/select_local_apps_activity.xml
@@ -1,16 +1,17 @@
+
+ xmlns:app="http://schemas.android.com/apk/res-auto" >
+ android:title="@string/menu_search"
+ app:actionViewClass="android.support.v7.widget.SearchView"
+ app:showAsAction="collapseActionView|always"/>
+ app:showAsAction="ifRoom"/>
\ No newline at end of file
diff --git a/src/org/fdroid/fdroid/AppDetails.java b/src/org/fdroid/fdroid/AppDetails.java
index a1cea8a64..8b331c65d 100644
--- a/src/org/fdroid/fdroid/AppDetails.java
+++ b/src/org/fdroid/fdroid/AppDetails.java
@@ -59,12 +59,12 @@ import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
+
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
+
import org.fdroid.fdroid.Utils.CommaSeparatedList;
-import org.fdroid.fdroid.compat.ActionBarCompat;
-import org.fdroid.fdroid.compat.MenuManager;
import org.fdroid.fdroid.compat.PackageManagerCompat;
import org.fdroid.fdroid.data.Apk;
import org.fdroid.fdroid.data.ApkProvider;
@@ -126,18 +126,18 @@ public class AppDetails extends ActionBarActivity implements ProgressListener, A
TextView added;
TextView nativecode;
}
-
+
// observer to update view when package has been installed/deleted
AppObserver myAppObserver;
class AppObserver extends ContentObserver {
public AppObserver(Handler handler) {
- super(handler);
+ super(handler);
}
@Override
public void onChange(boolean selfChange) {
this.onChange(selfChange, null);
- }
+ }
@Override
public void onChange(boolean selfChange, Uri uri) {
@@ -147,7 +147,7 @@ public class AppDetails extends ActionBarActivity implements ProgressListener, A
}
refreshApkList();
- MenuManager.create(AppDetails.this).invalidateOptionsMenu();
+ supportInvalidateOptionsMenu();
}
}
@@ -384,7 +384,7 @@ public class AppDetails extends ActionBarActivity implements ProgressListener, A
mPm = getPackageManager();
installer = Installer.getActivityInstaller(this, mPm, myInstallerCallback);
-
+
// Get the preferences we're going to use in this Activity...
ConfigurationChangeHelper previousData = (ConfigurationChangeHelper)getLastCustomNonConfigurationInstance();
if (previousData != null) {
@@ -409,10 +409,7 @@ public class AppDetails extends ActionBarActivity implements ProgressListener, A
// fragments, which rely on data from the activity that is set earlier in this method.
setContentView(R.layout.app_details);
- // Actionbar cannot be accessed until after setContentView (on 3.0 and 3.1 devices)
- // see: http://blog.perpetumdesign.com/2011/08/strange-case-of-dr-action-and-mr-bar.html
- // for reason why.
- ActionBarCompat.create(this).setDisplayHomeAsUpEnabled(true);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// Check for the presence of a view which only exists in the landscape view.
// This seems to be the preferred way to interrogate the view, rather than
@@ -463,7 +460,7 @@ public class AppDetails extends ActionBarActivity implements ProgressListener, A
protected void onResumeFragments() {
super.onResumeFragments();
refreshApkList();
- MenuManager.create(this).invalidateOptionsMenu();
+ supportInvalidateOptionsMenu();
}
/**
@@ -800,6 +797,7 @@ public class AppDetails extends ActionBarActivity implements ProgressListener, A
}
// Install the version of this app denoted by 'app.curApk'.
+ @Override
public void install(final Apk apk) {
String [] projection = { RepoProvider.DataColumns.ADDRESS };
Repo repo = RepoProvider.Helper.findById(this, apk.repo, projection);
@@ -883,7 +881,7 @@ public class AppDetails extends ActionBarActivity implements ProgressListener, A
public void onSuccess(final int operation) {
runOnUiThread(new Runnable() {
@Override
- public void run() {
+ public void run() {
if (operation == Installer.InstallerCallback.OPERATION_INSTALL) {
PackageManagerCompat.setInstaller(mPm, app.id);
}
@@ -907,9 +905,9 @@ public class AppDetails extends ActionBarActivity implements ProgressListener, A
@Override
public void run() {
setProgressBarIndeterminateVisibility(false);
-
+
Log.e(TAG, "Installer aborted with errorCode: " + errorCode);
-
+
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(AppDetails.this);
alertBuilder.setTitle(R.string.installer_error_title);
alertBuilder.setMessage(R.string.installer_error_title);
@@ -1049,7 +1047,7 @@ public class AppDetails extends ActionBarActivity implements ProgressListener, A
if (installer.handleOnActivityResult(requestCode, resultCode, data)) {
return;
}
-
+
switch (requestCode) {
case REQUEST_ENABLE_BLUETOOTH:
fdroidApp.sendViaBluetooth(this, resultCode, app.id);
@@ -1057,18 +1055,22 @@ public class AppDetails extends ActionBarActivity implements ProgressListener, A
}
}
+ @Override
public App getApp() {
return app;
}
+ @Override
public ApkListAdapter getApks() {
return adapter;
}
+ @Override
public Signature getInstalledSignature() {
return mInstalledSignature;
}
+ @Override
public String getInstalledSignatureId() {
return mInstalledSigID;
}
diff --git a/src/org/fdroid/fdroid/UpdateService.java b/src/org/fdroid/fdroid/UpdateService.java
index 21dec8aa2..0638806c9 100644
--- a/src/org/fdroid/fdroid/UpdateService.java
+++ b/src/org/fdroid/fdroid/UpdateService.java
@@ -18,25 +18,49 @@
package org.fdroid.fdroid;
-import android.app.*;
-import android.content.*;
+import android.app.AlarmManager;
+import android.app.IntentService;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.ProgressDialog;
+import android.content.ContentProviderOperation;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.Intent;
+import android.content.OperationApplicationException;
+import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.database.Cursor;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
-import android.os.*;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.RemoteException;
+import android.os.ResultReceiver;
+import android.os.SystemClock;
import android.preference.PreferenceManager;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.TaskStackBuilder;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;
-import org.fdroid.fdroid.data.*;
+
+import org.fdroid.fdroid.data.Apk;
+import org.fdroid.fdroid.data.ApkProvider;
+import org.fdroid.fdroid.data.App;
+import org.fdroid.fdroid.data.AppProvider;
+import org.fdroid.fdroid.data.Repo;
+import org.fdroid.fdroid.data.RepoProvider;
import org.fdroid.fdroid.net.Downloader;
import org.fdroid.fdroid.updater.RepoUpdater;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
public class UpdateService extends IntentService implements ProgressListener {
diff --git a/src/org/fdroid/fdroid/compat/ActionBarCompat.java b/src/org/fdroid/fdroid/compat/ActionBarCompat.java
deleted file mode 100644
index 9f78c0822..000000000
--- a/src/org/fdroid/fdroid/compat/ActionBarCompat.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.fdroid.fdroid.compat;
-
-import android.annotation.TargetApi;
-import android.app.ActionBar;
-import android.app.Activity;
-
-public abstract class ActionBarCompat extends Compatibility {
-
- public static ActionBarCompat create(Activity activity) {
- if (hasApi(11)) {
- return new HoneycombActionBarCompatImpl(activity);
- } else {
- return new OldActionBarCompatImpl(activity);
- }
- }
-
- protected final Activity activity;
-
- public ActionBarCompat(Activity activity) {
- this.activity = activity;
- }
-
- /**
- * Cannot be accessed until after setContentView (on 3.0 and 3.1 devices) has
- * been called on the relevant activity. If you don't have a content view
- * (e.g. when using fragment manager to add fragments to the activity) then you
- * will still need to call setContentView(), with a "new LinearLayout()" or something
- * useless like that.
- * See: http://blog.perpetumdesign.com/2011/08/strange-case-of-dr-action-and-mr-bar.html
- * for details.
- */
- public abstract void setDisplayHomeAsUpEnabled(boolean value);
-
-}
-
-class OldActionBarCompatImpl extends ActionBarCompat {
-
- public OldActionBarCompatImpl(Activity activity) {
- super(activity);
- }
-
- @Override
- public void setDisplayHomeAsUpEnabled(boolean value) {
- // Do nothing...
- }
-
-}
-
-@TargetApi(11)
-class HoneycombActionBarCompatImpl extends ActionBarCompat {
-
- private final ActionBar actionBar;
-
- public HoneycombActionBarCompatImpl(Activity activity) {
- super(activity);
- this.actionBar = activity.getActionBar();
- }
-
- @Override
- public void setDisplayHomeAsUpEnabled(boolean value) {
- actionBar.setDisplayHomeAsUpEnabled(value);
- }
-
-}
diff --git a/src/org/fdroid/fdroid/compat/MenuManager.java b/src/org/fdroid/fdroid/compat/MenuManager.java
deleted file mode 100644
index 08e2341b2..000000000
--- a/src/org/fdroid/fdroid/compat/MenuManager.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.fdroid.fdroid.compat;
-
-import android.annotation.TargetApi;
-import android.app.Activity;
-
-abstract public class MenuManager extends Compatibility {
-
- public static MenuManager create(Activity activity) {
- if (hasApi(11)) {
- return new HoneycombMenuManagerImpl(activity);
- } else {
- return new OldMenuManagerImpl(activity);
- }
- }
-
- protected final Activity activity;
-
- protected MenuManager(Activity activity) {
- this.activity = activity;
- }
-
- abstract public void invalidateOptionsMenu();
-
-}
-
-class OldMenuManagerImpl extends MenuManager {
-
- protected OldMenuManagerImpl(Activity activity) {
- super(activity);
- }
-
- @Override
- public void invalidateOptionsMenu() {
- }
-
-}
-
-@TargetApi(11)
-class HoneycombMenuManagerImpl extends MenuManager {
-
- protected HoneycombMenuManagerImpl(Activity activity) {
- super(activity);
- }
-
- @Override
- public void invalidateOptionsMenu() {
- activity.invalidateOptionsMenu();
- }
-}
diff --git a/src/org/fdroid/fdroid/views/AppListAdapter.java b/src/org/fdroid/fdroid/views/AppListAdapter.java
index 013f4aad4..b8e1934fb 100644
--- a/src/org/fdroid/fdroid/views/AppListAdapter.java
+++ b/src/org/fdroid/fdroid/views/AppListAdapter.java
@@ -1,7 +1,6 @@
package org.fdroid.fdroid.views;
import android.content.Context;
-import android.content.pm.PackageInfo;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.support.v4.widget.CursorAdapter;
@@ -11,10 +10,12 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
+
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
+
import org.fdroid.fdroid.Preferences;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.data.App;
diff --git a/src/org/fdroid/fdroid/views/LocalRepoActivity.java b/src/org/fdroid/fdroid/views/LocalRepoActivity.java
index 0741eb182..67ef20e07 100644
--- a/src/org/fdroid/fdroid/views/LocalRepoActivity.java
+++ b/src/org/fdroid/fdroid/views/LocalRepoActivity.java
@@ -30,6 +30,7 @@ import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;
+
import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.PreferencesActivity;
import org.fdroid.fdroid.QrGenAsyncTask;
@@ -158,8 +159,6 @@ public class LocalRepoActivity extends ActionBarActivity {
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.local_repo_activity, menu);
- if (Build.VERSION.SDK_INT < 14) // TODO remove after including appcompat-v7
- menu.findItem(R.id.menu_setup_repo).setVisible(false);
return true;
}
diff --git a/src/org/fdroid/fdroid/views/SelectLocalAppsActivity.java b/src/org/fdroid/fdroid/views/SelectLocalAppsActivity.java
index 8d009aeab..007193691 100644
--- a/src/org/fdroid/fdroid/views/SelectLocalAppsActivity.java
+++ b/src/org/fdroid/fdroid/views/SelectLocalAppsActivity.java
@@ -5,11 +5,12 @@ import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBarActivity;
+import android.support.v7.view.ActionMode;
import android.support.v7.widget.SearchView;
-import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+
import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.PreferencesActivity;
import org.fdroid.fdroid.R;
@@ -51,10 +52,6 @@ public class SelectLocalAppsActivity extends ActionBarActivity {
setResult(RESULT_CANCELED);
finish();
return true;
- case R.id.action_search:
- SearchView searchView = (SearchView) item.getActionView();
- searchView.setIconified(false);
- return true;
case R.id.action_settings:
startActivity(new Intent(this, PreferencesActivity.class));
return true;
@@ -68,7 +65,6 @@ public class SelectLocalAppsActivity extends ActionBarActivity {
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.select_local_apps_action_mode, menu);
- menu.findItem(R.id.action_search).setActionView(searchView);
return true;
}
diff --git a/src/org/fdroid/fdroid/views/fragments/SelectLocalAppsFragment.java b/src/org/fdroid/fdroid/views/fragments/SelectLocalAppsFragment.java
index 86abed345..01d037a55 100644
--- a/src/org/fdroid/fdroid/views/fragments/SelectLocalAppsFragment.java
+++ b/src/org/fdroid/fdroid/views/fragments/SelectLocalAppsFragment.java
@@ -23,16 +23,17 @@ import android.support.v4.app.ListFragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
+import android.support.v4.widget.SimpleCursorAdapter;
+import android.support.v4.widget.SimpleCursorAdapter.ViewBinder;
+import android.support.v7.view.ActionMode;
import android.support.v7.widget.SearchView.OnQueryTextListener;
import android.text.TextUtils;
-import android.view.ActionMode;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
-import android.widget.SimpleCursorAdapter;
-import android.widget.SimpleCursorAdapter.ViewBinder;
import android.widget.TextView;
+
import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.data.InstalledAppProvider;
@@ -125,8 +126,8 @@ public class SelectLocalAppsFragment extends ListFragment
public void onListItemClick(ListView l, View v, int position, long id) {
if (mActionMode == null)
mActionMode = selectLocalAppsActivity
- .startActionMode(selectLocalAppsActivity.mActionModeCallback);
- Cursor c = (Cursor) l.getAdapter().getItem(position);
+ .startSupportActionMode(selectLocalAppsActivity.mActionModeCallback);
+ Cursor c = (Cursor) getListAdapter().getItem(position);
String packageName = c.getString(c.getColumnIndex(DataColumns.APP_ID));
if (FDroidApp.selectedApps.contains(packageName)) {
FDroidApp.selectedApps.remove(packageName);
@@ -155,7 +156,8 @@ public class SelectLocalAppsFragment extends ListFragment
@Override
public void onLoadFinished(Loader loader, Cursor cursor) {
- ((SimpleCursorAdapter) this.getListAdapter()).swapCursor(cursor);
+ SimpleCursorAdapter adapter = (SimpleCursorAdapter) getListAdapter();
+ adapter.swapCursor(cursor);
ListView listView = getListView();
int count = listView.getCount();
@@ -183,7 +185,8 @@ public class SelectLocalAppsFragment extends ListFragment
@Override
public void onLoaderReset(Loader loader) {
- ((SimpleCursorAdapter) this.getListAdapter()).swapCursor(null);
+ SimpleCursorAdapter adapter = (SimpleCursorAdapter) getListAdapter();
+ adapter.swapCursor(null);
}
@Override