Android Open Source - MapsMuzei Maps Art Source






From Project

Back to project page MapsMuzei.

License

The source code is released under:

Apache License

If you think the Android project MapsMuzei 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 2014 Bonysoft (Daniele Bonaldo)
 * Copyright 2014 Google Inc.//w ww  . 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 net.bonysoft.mapsmuzei;

import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.Toast;
import com.google.android.apps.muzei.api.Artwork;
import com.google.android.apps.muzei.api.RemoteMuzeiArtSource;
import com.google.android.apps.muzei.api.UserCommand;

public class MapsArtSource extends RemoteMuzeiArtSource {
    private static final String TAG = MapsArtSource.class.getSimpleName();
    private static final String SOURCE_NAME = "MapsArtSource";

    private static final int COMMAND_SHARE_ARTWORK = 1337;
    public static final String ACTION_SETTINGS_MODIFIED = "settings_modified_action";

    public MapsArtSource() {
        super(SOURCE_NAME);
    }

    @Override
    public void onCreate() {
        super.onCreate();
        setUserCommands(new UserCommand(BUILTIN_COMMAND_ID_NEXT_ARTWORK),
                        new UserCommand(COMMAND_SHARE_ARTWORK, getString(R.string.share)));
    }

    @Override
    protected void onCustomCommand(int id) {
        if (id == COMMAND_SHARE_ARTWORK) {
            Artwork currentArtwork = getCurrentArtwork();
            if (currentArtwork == null) {
                Log.w(TAG, "No current artwork, can't share.");
                new Handler(Looper.getMainLooper()).post(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(MapsArtSource.this,
                                       R.string.source_error_no_artwork_to_share,
                                       Toast.LENGTH_SHORT).show();
                    }
                });
                return;
            }

            String detailUrl = currentArtwork.getViewIntent().getDataString();
            String description = currentArtwork.getByline().trim();

            Intent shareIntent = new Intent(Intent.ACTION_SEND);
            shareIntent.setType("text/plain");
            shareIntent.putExtra(Intent.EXTRA_TEXT, "My Android wallpaper today is the map '"
                                                    + currentArtwork.getTitle().trim()
                                                    + "' on " + description
                                                    + ". #Muzei\n\n"
                                                    + detailUrl);
            shareIntent = Intent.createChooser(shareIntent, "Share artwork");
            shareIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(shareIntent);
        }
        else {
            super.onCustomCommand(id);
        }
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        if (intent == null) {
            super.onHandleIntent(intent);
            return;
        }
        if (BuildConfig.DEBUG) Log.d(TAG, "Handle intent: " + intent.getAction());

        String action = intent.getAction();
        if (ACTION_SETTINGS_MODIFIED.equals(action)) {
            scheduleUpdate(System.currentTimeMillis() + 1000);
            return;
        }

        super.onHandleIntent(intent);
    }

    @Override
    protected void onTryUpdate(int reason) throws RetryException {
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

        // Check if we should cancel the update due to WIFI connection and preference
        if (prefs.getBoolean(Constants.PREF_WIFI_ONLY, Constants.PREF_WIFI_ONLY_DEFAULT) && !Utils.isWiFiConnected(this)) {
            if (BuildConfig.DEBUG) Log.d(TAG, "Refresh skipped: no WiFi");
            scheduleNextUpdate(prefs);
            return;
        }

        MapTheme style;
        int zoom = prefs.getInt(Constants.PREF_ZOOM, Constants.PREF_ZOOM_DEFAULT);
        int mapTheme = prefs.getInt(Constants.PREF_MAP_TYPE, Constants.PREF_MAP_TYPE_DEFAULT);
        if (MapTheme.isStandardTheme(mapTheme)) {
            style = new MapTheme();
            style.setMapMode(mapTheme);
            boolean isInverted = prefs.getBoolean(Constants.PREF_INVERTED, Constants.PREF_INVERTED_DEFAULT);
            style.setInverted(isInverted);
        }
        else {
            style = MapTheme.loadCustomTheme(this, mapTheme);
        }

        MapImage map = new MapImage(this, zoom, style);

        if (BuildConfig.DEBUG) Log.d(TAG, "Publishing map: " + map.getTitle() + " URL:" + map.getImageUrl());
        publishArtwork(new Artwork.Builder()
                           .title(map.getTitle())
                           .byline(map.getDescription())
                           .imageUri(Uri.parse(map.getImageUrl()))
                           .token(map.getToken())
                           .viewIntent(new Intent(Intent.ACTION_VIEW,
                                                  Uri.parse(map.getIntentUrl())))
                           .build());

        scheduleNextUpdate(prefs);
    }

    private void scheduleNextUpdate(SharedPreferences prefs) {
        int updateTimeIndex = prefs.getInt(Constants.PREF_UPDATE_INTERVAL, Constants.PREF_UPDATE_INTERVAL_DEFAULT);
        int updateMinutes = getResources().getIntArray(R.array.update_frequency_values)[updateTimeIndex];
        if (BuildConfig.DEBUG) Log.d(TAG, "Scheduling update in " + updateMinutes + " minutes");
        scheduleUpdate(System.currentTimeMillis() + updateMinutes * 1000 * 60);
    }

}




Java Source Code List

net.bonysoft.mapsmuzei.Constants.java
net.bonysoft.mapsmuzei.MapImage.java
net.bonysoft.mapsmuzei.MapTheme.java
net.bonysoft.mapsmuzei.MapsArtSource.java
net.bonysoft.mapsmuzei.MapsMuzeiApplication.java
net.bonysoft.mapsmuzei.SettingsActivity.java
net.bonysoft.mapsmuzei.Utils.java