Android Open Source - android-wear-tutorial Suggestion Service






From Project

Back to project page android-wear-tutorial.

License

The source code is released under:

Apache License

If you think the Android project android-wear-tutorial listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright 2015 Simone Casagranda./*from   ww w  .  j  a va 2  s  . c  om*/
 *
 * 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.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alchemiasoft.book.service;

import android.app.IntentService;
import android.app.PendingIntent;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.BitmapFactory;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationManagerCompat;
import android.support.v4.app.RemoteInput;
import android.util.Log;

import com.alchemiasoft.book.R;
import com.alchemiasoft.book.activity.HomeActivity;
import com.alchemiasoft.common.content.BookDB;
import com.alchemiasoft.common.model.Book;
import com.alchemiasoft.book.receiver.SuggestionReceiver;

/**
 * IntentService that takes care of suggesting the user to buy a book that he doesn't already own.
 * <p/>
 * Created by Simone Casagranda on 27/12/14.
 */
public class SuggestionService extends IntentService {

    private static final String TAG_LOG = SuggestionService.class.getSimpleName();

    private static final int ID_SUGGESTION = 23;

    private static final String SELECTION = BookDB.Book.OWNED + " = ?";
    private static final String[] SELECT_NOT_OWNED = {String.valueOf(0)};

    public SuggestionService() {
        super(TAG_LOG);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        Log.d(TAG_LOG, "Starting a new book suggestion...");
        final ContentResolver cr = getContentResolver();
        final Cursor c = cr.query(BookDB.Book.CONTENT_URI, null, SELECTION, SELECT_NOT_OWNED, null);
        Book book = null;
        try {
            if (c.moveToNext()) {
                book = Book.oneFrom(c);
            }
        } finally {
            c.close();
        }
        // Showing a notification if a not owned book is found
        if (book != null) {
            Log.d(TAG_LOG, "Found book that can be suggested: " + book);
            final String content = getString(R.string.content_book_suggestion, book.getTitle(), book.getAuthor());
            final NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
            builder.setSmallIcon(R.drawable.ic_launcher).setAutoCancel(true).setContentTitle(getString(R.string.title_book_suggestion)).setContentText(content);
            builder.setStyle(new NotificationCompat.BigTextStyle().bigText(content));
            builder.setContentIntent(PendingIntent.getActivity(this, 0, HomeActivity.createFor(this, book), PendingIntent.FLAG_UPDATE_CURRENT));

            // ONLY 4 WEARABLE(s)
            final NotificationCompat.WearableExtender wearableExtender = new NotificationCompat.WearableExtender();
            // SECOND PAGE WITH BOOK DESCRIPTION
            wearableExtender.addPage(new NotificationCompat.Builder(this).setContentTitle(getString(R.string.description))
                    .setStyle(new NotificationCompat.BigTextStyle().bigText(book.getDescrition())).build());
            wearableExtender.setBackground(BitmapFactory.decodeResource(getResources(), R.drawable.background));
            // ACTION TO PURCHASE A BOOK FROM A WEARABLE
            final PendingIntent purchaseIntent = PendingIntent.getService(this, 0, BookActionService.IntentBuilder.buy(this, book).notificationId(ID_SUGGESTION)
                    .wearableInput().build(), PendingIntent.FLAG_UPDATE_CURRENT);
            wearableExtender.addAction(new NotificationCompat.Action.Builder(R.drawable.ic_action_buy, getString(R.string.action_buy), purchaseIntent).build());
            // ACTION TO ADD NOTES VIA VOICE REPLY
            final RemoteInput input = BookActionService.RemoteInputBuilder.create(this).options(R.array.note_options).build();
            final PendingIntent notesIntent = PendingIntent.getService(this, 0, BookActionService.IntentBuilder.addNote(this, book).notificationId(ID_SUGGESTION)
                    .wearableInput().build(), PendingIntent.FLAG_UPDATE_CURRENT);
            wearableExtender.addAction(new NotificationCompat.Action.Builder(R.drawable.ic_action_notes, getString(R.string.action_notes), notesIntent)
                    .addRemoteInput(input).build());
            // Finally extending the notification
            builder.extend(wearableExtender);

            // Sending the notification
            NotificationManagerCompat.from(this).notify(ID_SUGGESTION, builder.build());
        }
        // Completing the Wakeful Intent
        SuggestionReceiver.completeWakefulIntent(intent);
    }
}




Java Source Code List

com.alchemiasoft.book.ApplicationTest.java
com.alchemiasoft.book.activity.HomeActivity.java
com.alchemiasoft.book.fragment.BookDetailFragment.java
com.alchemiasoft.book.fragment.BooksFragment.java
com.alchemiasoft.book.fragment.base.RecyclerViewFragment.java
com.alchemiasoft.book.receiver.BootCompletedReceiver.java
com.alchemiasoft.book.receiver.SuggestionReceiver.java
com.alchemiasoft.book.service.BookActionService.java
com.alchemiasoft.book.service.SuggestionService.java
com.alchemiasoft.book.user.UserData.java
com.alchemiasoft.book.widget.SmartSwipeRefreshLayout.java
com.alchemiasoft.books.activity.BooksActivity.java
com.alchemiasoft.common.ApplicationTest.java
com.alchemiasoft.common.content.BookContentProvider.java
com.alchemiasoft.common.content.BookDBOpenHelper.java
com.alchemiasoft.common.content.BookDB.java
com.alchemiasoft.common.lib.Constants.java
com.alchemiasoft.common.model.Book.java
com.alchemiasoft.common.util.AlarmUtil.java
com.alchemiasoft.common.util.IOUtils.java
com.alchemiasoft.common.util.ResUtil.java
com.alchemiasoft.common.util.ViewUtil.java