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 @@ - + + android:title="@string/setup_repo" + app:showAsAction="ifRoom|withText"/> + android:title="@string/send_fdroid_via_wifi" + app:showAsAction="never"/> + android:title="@string/menu_preferences" + app:showAsAction="never"/> - + \ 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