Yeti

Additional

Language
Java
Version
N/A
Created
Feb 15, 2015
Updated
Jan 30, 2017 (Retired)
Owner
Quentin Dommerc (quentin23soleil)
Contributors
Ilya Zorin (geralt-encore)
Nikos Linakis (linakis)
Quentin Dommerc (quentin23soleil)
3
Activity
Badge
Generate
Download
Source code

Yeti - Control what you share

Do you want to customize what you share, depending on what the user wants to share it with?

Let's say you want to add a "via @theTwitterAccountOfYourProduct" if the content is being shared with a Twitter client.

###BOOM! That's what Yeti does.

Add to your project

Gradle (jcenter)

compile 'me.kentin:yeti:1.1.0'

Maven

Who uses that? Seriously.

Or you can clone it and import yeti as a module.

Usage

Two options. Because there are 2 ways to share on Android.

  • using a shareActionProvider (the menu thing)
  • using a normal intent, with ACTION_SEND.

For both you're going to need an Intent anyway.

shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, "This is the text BEFORE you change it bro. (if you want huh)");

ShareActionProvider

Add the action provider to your menu xml.

<item
  android:id="@+id/menu_item_share"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  app:showAsAction="ifRoom"
  android:title="Share"
  app:actionProviderClass="me.kentin.yeti.YetiActionProvider" />

And set the intent in your activity:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar/toolbar if it is present.
    getMenuInflater().inflate(R.menu.menu_actionprovideractivity, menu);

    // Locate MenuItem with YetiActionProvider
    MenuItem item = menu.findItem(R.id.menu_item_share);

    // Fetch and store ShareActionProvider
    yetiActionProvider = (YetiActionProvider) MenuItemCompat.getActionProvider(item);

    // You don't have to Override everything though, just what you want
    yetiActionProvider.setOnShareListener(shareListener);
    yetiActionProvider.setShareIntent(shareIntent);

    return true;
}

Normal way

Create the Yeti intent and then, startActivityForResult with it.

Yeti yeti = Yeti.with(activity);
Intent intent = yeti.share(yourShareIntent)
startActivityForResult(yeti.share(shareIntent), REQUEST_CODE_YETI);

Override onActivityResult and use THE SAME INSTANCE OF YETI with the data.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_YETI) {
        yeti.result(data, shareListener);
    }
}

shareListener here is just a OnShareListener.

Todo

  • "I want to share with Twitter, and Facebook only. Filter the apps pretty please." ---> Done in 1.1.0
  • Want something? Tell me. :)

Contributors

License

Yeti is licensed under the Apache 2 license (you can use it in commercial and open source projects).

Copyright 2015 Quentin Dommerc

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Anyway no one read this, so why would I care having meaningful License.
See the License for the specific language governing permissions and
limitations under the License.