package it.michelelacorte.exampleandroidshortcuts; import android.app.Activity; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.method.LinkMovementMethod; import android.view.GestureDetector; import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import it.michelelacorte.androidshortcuts.RemoteShortcuts; import it.michelelacorte.androidshortcuts.Shortcuts; import it.michelelacorte.androidshortcuts.ShortcutsBuilder; import it.michelelacorte.androidshortcuts.ShortcutsCreation; import it.michelelacorte.androidshortcuts.util.StyleOption; public class MainActivity extends AppCompatActivity { private final String TAG = "MainActivity"; private AdapterView gridView; public static Drawable img; private ShortcutsCreation shortcutsCreation; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Try to hide toolbar, library works! /* try { getSupportActionBar().hide(); }catch(Exception e){} */ //Example of remote shortcuts ArrayList<Shortcuts> listOfShortcuts = new ArrayList<>(); listOfShortcuts.add(new Shortcuts(R.drawable.ic_done_black_24dp, "AndroidShortcuts")); listOfShortcuts.add(new Shortcuts(R.drawable.ic_add_black_24dp, "App Shortcuts")); listOfShortcuts.add(new Shortcuts(R.drawable.ic_code_black_24dp, "Test Shortcuts", "it.michelelacorte.exampleandroidshortcuts.MainActivity", "it.michelelacorte.exampleandroidshortcuts")); //Call this for save shortcuts and make accessible from library RemoteShortcuts.saveRemoteShortcuts(this, listOfShortcuts); final RelativeLayout activityParent = (RelativeLayout) findViewById(R.id.activity_main); gridView = (GridView) findViewById(R.id.gridView); final ExampleArrayAdapter exampleArrayAdapter = new ExampleArrayAdapter(this, R.layout.app_grid_item); gridView.setAdapter(exampleArrayAdapter); //Create gesture detector for onLongPress final GestureDetector gestureDetector = new GestureDetector(getApplicationContext(), new GestureDetector.OnGestureListener() { @Override public boolean onDown(MotionEvent motionEvent) { if(shortcutsCreation != null) shortcutsCreation.clearAllLayout(); return false; } @Override public void onShowPress(MotionEvent motionEvent) { if(shortcutsCreation != null) shortcutsCreation.clearAllLayout(); } @Override public boolean onSingleTapUp(MotionEvent motionEvent) { if(shortcutsCreation != null) shortcutsCreation.clearAllLayout(); return false; } @Override public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { if(shortcutsCreation != null) shortcutsCreation.clearAllLayout(); return false; } @Override public void onLongPress(MotionEvent motionEvent) { if(shortcutsCreation != null) shortcutsCreation.clearAllLayout(); //Now create shortcuts! int positionPointed = ((GridView) gridView).pointToPosition((int) motionEvent.getX(), (int) motionEvent.getY()); try { /* if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { ArrayList<Shortcuts> shortcutsArrayList = new ArrayList<>(); shortcutsArrayList = RemoteShortcuts.getRemoteShortcutsOnAPI25(MainActivity.this, ExampleArrayAdapter.pkgAppsList.get(positionPointed).activityInfo.packageName, ExampleArrayAdapter.pkgAppsList.get(positionPointed).activityInfo.applicationInfo.uid); Drawable packageImage = ExampleArrayAdapter.pkgAppsList.get(positionPointed).activityInfo.loadIcon(getPackageManager()); shortcutsCreation.setPackageImage(packageImage); shortcutsCreation.createShortcuts((int) motionEvent.getX(), (int) motionEvent.getY(), 96, StyleOption.LINE_LAYOUT, shortcutsArrayList); }else{ Toast.makeText(MainActivity.this, "Your SDK version is " + " " + android.os.Build.VERSION.SDK_INT + " this invokation requires " + Build.VERSION_CODES.N_MR1, Toast.LENGTH_SHORT) .show(); } */ Drawable packageImage = ExampleArrayAdapter.pkgAppsList.get(positionPointed).activityInfo.loadIcon(getPackageManager()); ShortcutsBuilder builder = new ShortcutsBuilder.Builder(MainActivity.this, activityParent) .normalShortcuts(gridView, (int) motionEvent.getX(), (int) motionEvent.getY(), 96) .setOptionLayoutStyle(StyleOption.LINE_LAYOUT) .setPackageImage(packageImage) .setShortcutsArray(new Shortcuts(R.drawable.ic_add_black_24dp, "Shortcuts", new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(getApplicationContext(), "Hello Shortcuts!!", Toast.LENGTH_LONG).show(); if(shortcutsCreation != null) shortcutsCreation.clearAllLayout(); } }), new Shortcuts(R.drawable.ic_done_black_24dp, "Nougat!", "it.michelelacorte.exampleandroidshortcuts.MainActivity", "it.michelelacorte.exampleandroidshortcuts"), new Shortcuts(R.drawable.ic_code_black_24dp, "App Shortcuts!", "it.michelelacorte.exampleandroidshortcuts.MainActivity", "it.michelelacorte.exampleandroidshortcuts")) .build(); shortcutsCreation = new ShortcutsCreation(builder); shortcutsCreation.init(); } catch (Exception e) { Toast.makeText(MainActivity.this, "Position Incorrect!", Toast.LENGTH_SHORT) .show(); } /* ArrayList<Shortcuts> listOfShortcuts = new ArrayList<>(); int positionPointed = ((GridView) gridView).pointToPosition((int) motionEvent.getX(), (int) motionEvent.getY()); try { Log.d(TAG, "NAME OF PACK CLICKED: " + ExampleArrayAdapter.pkgAppsList.get(positionPointed).activityInfo.packageName); //Get clicked package name String packageName = ExampleArrayAdapter.pkgAppsList.get(positionPointed).activityInfo.packageName; //Get package icon Drawable packageImage = ExampleArrayAdapter.pkgAppsList.get(positionPointed).activityInfo.loadIcon(getPackageManager()); //Get shortcuts for this package listOfShortcuts = RemoteShortcuts.getRemoteShortcuts(MainActivity.this, packageName); //If shortcuts are defined, show it! if (listOfShortcuts != null && listOfShortcuts.size() > 0) { shortcutsCreation.setPackageImage(packageImage); shortcutsCreation.createShortcuts((int) motionEvent.getX(), (int) motionEvent.getY(), 96, StyleOption.LINE_LAYOUT, listOfShortcuts); } else { Toast.makeText(MainActivity.this, "App Shortcuts not found for this package!", Toast.LENGTH_SHORT) .show(); } }catch(Exception e){ Toast.makeText(MainActivity.this, "Position Incorrect!", Toast.LENGTH_SHORT) .show(); } */ } @Override public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) { if(shortcutsCreation != null) shortcutsCreation.clearAllLayout(); return false; } }); gridView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { return gestureDetector.onTouchEvent(motionEvent); } }); donationAlertDialog(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); switch (id) { case R.id.about: aboutAlertDialog(); break; default: break; } return super.onOptionsItemSelected(item); } private void aboutAlertDialog() { AlertDialog builder = new AlertDialog.Builder(this, R.style.AlertDialogCustom).setTitle(getResources().getString(R.string.app_name)) .setCancelable(false) .setIcon(R.mipmap.ic_launcher) .setMessage(R.string.disclaimer_dialog_message) .setPositiveButton(getResources().getString(R.string.disclaimer_dialog_ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); } }).create(); builder.show(); ((TextView)builder.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance()); ((TextView)builder.findViewById(android.R.id.message)).setGravity(Gravity.CENTER_VERTICAL); builder.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT); } private void donationAlertDialog(){ AlertDialog builder = new AlertDialog.Builder(this, R.style.AlertDialogCustom).setTitle(getResources().getString(R.string.app_name)) .setCancelable(false) .setIcon(R.mipmap.ic_launcher) .setMessage(R.string.donation_dialog_message) .setPositiveButton(getResources().getString(R.string.disclaimer_dialog_ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); } }).create(); builder.show(); ((TextView)builder.findViewById(android.R.id.message)).setMovementMethod(LinkMovementMethod.getInstance()); ((TextView)builder.findViewById(android.R.id.message)).setGravity(Gravity.CENTER_VERTICAL); // builder.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT); } } class ExampleArrayAdapter extends BaseAdapter { private Activity activity; private int layoutResourceId; public static ArrayList<ResolveInfo> pkgAppsList; public ExampleArrayAdapter(Activity activity, int layoutResourceId) { this.activity = activity; this.layoutResourceId = layoutResourceId; Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); pkgAppsList = new ArrayList<>(activity.getPackageManager().queryIntentActivities( mainIntent, 0)); final PackageManager pm = activity.getPackageManager(); Collections.sort(pkgAppsList, new Comparator<ResolveInfo>(){ public int compare(ResolveInfo emp1, ResolveInfo emp2) { return emp1.loadLabel(pm).toString().compareToIgnoreCase(emp2.loadLabel(pm).toString()); } }); } @Override public int getCount() { // TODO Auto-generated method stub return 20;//create views as per count of IDU found in one group } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } @Override public View getView(final int position, View convertView, ViewGroup parent) { View row = convertView; ViewHolder holder = null; if (row == null) { LayoutInflater inflater = (LayoutInflater) activity.getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); row = inflater.inflate(layoutResourceId, parent, false); holder = new ViewHolder(); holder.appImage = (ImageView) row.findViewById(R.id.appIcon); holder.appText = (TextView) row.findViewById(R.id.appText); row.setTag(holder); } else { holder = (ViewHolder) row.getTag(); } holder.appImage.setImageDrawable(pkgAppsList.get(position).loadIcon(activity.getPackageManager())); holder.appText.setText(pkgAppsList.get(position).loadLabel(activity.getPackageManager()).toString()); //holder.appImage.setImageResource(R.mipmap.ic_launcher); //holder.appText.setText("App Text"); return row; } static class ViewHolder { private ImageView appImage; private TextView appText; } }