Skip to content

Commit

Permalink
Add support for adaptive icons
Browse files Browse the repository at this point in the history
  • Loading branch information
httpdispatch committed Jan 16, 2019
1 parent 2f76a20 commit eba8774
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
import android.support.v4.content.ContextCompat;
import android.support.v4.view.AccessibilityDelegateCompat;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.KeyEventCompat;
import android.support.v4.view.MotionEventCompat;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewGroupCompat;
Expand Down Expand Up @@ -1469,7 +1468,7 @@ void cancelChildViewTouch() {
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && hasVisibleDrawer()) {
KeyEventCompat.startTracking(event);
event.startTracking();
return true;
}
return super.onKeyDown(keyCode, event);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import android.net.Uri;

import com.app.missednotificationsreminder.R;
import com.app.missednotificationsreminder.data.model.util.ApplicationIconHandler;
import com.app.missednotificationsreminder.di.qualifiers.CreateDismissNotification;
import com.app.missednotificationsreminder.di.qualifiers.ForApplication;
import com.app.missednotificationsreminder.di.qualifiers.ForceWakeLock;
Expand Down Expand Up @@ -264,8 +265,9 @@ Preference<Boolean> provideCreateDismissNotification(RxSharedPreferences prefs)
return app.getPackageManager();
}

@Provides @Singleton Picasso providePicasso(Application app) {
@Provides @Singleton Picasso providePicasso(Application app, PackageManager packageManager) {
return new Picasso.Builder(app)
.addRequestHandler(new ApplicationIconHandler(packageManager))
.listener((picasso, uri, e) -> Timber.e(e, "Failed to load image: %s", uri))
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import android.net.Uri;

import com.app.missednotificationsreminder.binding.model.ApplicationsSelectionViewModel;
import com.app.missednotificationsreminder.data.model.util.ApplicationIconHandler;

/**
* The class to store application item information used in the {@link ApplicationsSelectionViewModel}
Expand All @@ -28,10 +29,10 @@ public ApplicationItem(boolean checked, PackageInfo packageInfo, PackageManager
mChecked = checked;
mApplicationName = packageInfo.applicationInfo.loadLabel(packageManager);
mPackageName = packageInfo.packageName;
int icon = packageInfo.applicationInfo.icon;
if (icon != 0) {
mIconUri = Uri.parse("android.resource://" + packageInfo.packageName + "/" + icon);
}
mIconUri = new Uri.Builder()
.scheme(ApplicationIconHandler.SCHEME)
.authority(mPackageName)
.build();
}

public boolean isChecked() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.app.missednotificationsreminder.data.model.util;

import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;

import com.squareup.picasso.Picasso;
import com.squareup.picasso.Request;
import com.squareup.picasso.RequestHandler;

import java.io.IOException;

import timber.log.Timber;

/**
* The application icon picasso handler
*/
public class ApplicationIconHandler extends RequestHandler {
public static final String SCHEME = "appicon";

private final PackageManager mPackageManager;

public ApplicationIconHandler(PackageManager packageManager) {
mPackageManager = packageManager;
}

@Override
public boolean canHandleRequest(Request data) {
return SCHEME.equals(data.uri.getScheme());
}

@Override
public Result load(Request request, int networkPolicy) throws IOException {
String packageName = request.uri.getHost();
return new Result(getAppIcon(packageName), Picasso.LoadedFrom.DISK);
}

public Bitmap getAppIcon(String packageName) {

try {
Drawable drawable = mPackageManager.getApplicationIcon(packageName);

if (drawable instanceof BitmapDrawable) {
return ((BitmapDrawable) drawable).getBitmap();
} else if (drawable != null) {
final Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
} else {
return null;
}
} catch (PackageManager.NameNotFoundException e) {
Timber.e(e);
}

return null;
}
}

0 comments on commit eba8774

Please sign in to comment.