diff options
| author | Rémi Verschelde <remi@verschelde.fr> | 2016-06-07 09:45:24 +0200 | 
|---|---|---|
| committer | Rémi Verschelde <remi@verschelde.fr> | 2016-06-07 09:45:24 +0200 | 
| commit | aed547423825af99fbd5112c39c7e3c33fc2200f (patch) | |
| tree | f2db7e34e7bf218ff0a7ab48e6ea5d6978951a89 /platform/android/java/src | |
| parent | 0729c852b4f459b9cb6350f564136e3e8aa6c2cf (diff) | |
| parent | e5d16eca466aa50b57a127d660499591f16f2255 (diff) | |
Merge pull request #4729 from volzhs/android-23
Supporting Android API 23 (Android 6.0)
Diffstat (limited to 'platform/android/java/src')
8 files changed, 42 insertions, 150 deletions
diff --git a/platform/android/java/src/com/android/vending/licensing/LicenseChecker.java b/platform/android/java/src/com/android/vending/licensing/LicenseChecker.java index 0b1c4b6cca..531cb22f8c 100644 --- a/platform/android/java/src/com/android/vending/licensing/LicenseChecker.java +++ b/platform/android/java/src/com/android/vending/licensing/LicenseChecker.java @@ -146,11 +146,11 @@ public class LicenseChecker implements ServiceConnection {              if (mService == null) {                  Log.i(TAG, "Binding to licensing service.");                  try { +                    Intent serviceIntent = new Intent(new String(Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U="))); +					serviceIntent.setPackage("com.android.vending");                      boolean bindResult = mContext                              .bindService( -                                    new Intent( -                                            new String( -                                                    Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U="))), +                                    serviceIntent,                                      this, // ServiceConnection.                                      Context.BIND_AUTO_CREATE); diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/Constants.java b/platform/android/java/src/com/google/android/vending/expansion/downloader/Constants.java index ff2c6f535a..2af33b96b9 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/Constants.java +++ b/platform/android/java/src/com/google/android/vending/expansion/downloader/Constants.java @@ -33,6 +33,10 @@ public class Constants {      public static final String EXP_PATH = File.separator + "Android"              + File.separator + "obb" + File.separator; +    // save to private app's data on Android 6.0 to skip requesting permission. +    public static final String EXP_PATH_API23 = File.separator + "Android" +            + File.separator + "data" + File.separator; +          /** The intent that gets sent when the service must wake up for a retry */      public static final String ACTION_RETRY = "android.intent.action.DOWNLOAD_WAKEUP"; @@ -70,7 +74,7 @@ public class Constants {       * The number of times that the download manager will retry its network       * operations when no progress is happening before it gives up.       */ -    public static final int MAX_RETRIES = 5; +    public static final int MAX_RETRIES = 10;      /**       * The minimum amount of time that the download manager accepts for diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/Helpers.java b/platform/android/java/src/com/google/android/vending/expansion/downloader/Helpers.java index b4c28d36e7..ae3fe957cb 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/Helpers.java +++ b/platform/android/java/src/com/google/android/vending/expansion/downloader/Helpers.java @@ -19,6 +19,7 @@ package com.google.android.vending.expansion.downloader;  import com.godot.game.R;  import android.content.Context; +import android.os.Build;  import android.os.Environment;  import android.os.StatFs;  import android.os.SystemClock; @@ -220,8 +221,8 @@ public class Helpers {      static public String getSaveFilePath(Context c) {          File root = Environment.getExternalStorageDirectory(); -        String path = root.toString() + Constants.EXP_PATH + c.getPackageName(); -        return path; +        String path = Build.VERSION.SDK_INT >= 23 ? Constants.EXP_PATH_API23 : Constants.EXP_PATH; +        return root.toString() + path + c.getPackageName();      }      /** diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/CustomNotificationFactory.java b/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/CustomNotificationFactory.java index 9a0ca02122..e2673a9dd7 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/CustomNotificationFactory.java +++ b/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/CustomNotificationFactory.java @@ -25,6 +25,6 @@ public class CustomNotificationFactory {          if (android.os.Build.VERSION.SDK_INT > 13)              return new V14CustomNotification();          else -            return new V3CustomNotification(); +            throw new RuntimeException();      }  } diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java b/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java index d82b658bc3..73e6f83bec 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java +++ b/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java @@ -27,6 +27,7 @@ import android.app.NotificationManager;  import android.app.PendingIntent;  import android.content.Context;  import android.os.Messenger; +import android.support.v4.app.NotificationCompat;  /**   * This class handles displaying the notification associated with the download @@ -48,8 +49,9 @@ public class DownloadNotification implements IDownloaderClient {      private IDownloaderClient mClientProxy;      final ICustomNotification mCustomNotification; -    private Notification mNotification; -    private Notification mCurrentNotification; +    // NotificationCompat.Builder is used to support API < 16. This can be changed to Notification.Builder if minimum API >= 16. +    private NotificationCompat.Builder mNotificationBuilder; +    private NotificationCompat.Builder mCurrentNotificationBuilder;      private CharSequence mLabel;      private String mCurrentText;      private PendingIntent mContentIntent; @@ -132,17 +134,14 @@ public class DownloadNotification implements IDownloaderClient {              }              mCurrentText = mContext.getString(stringDownloadID);              mCurrentTitle = mLabel.toString(); -            mCurrentNotification.tickerText = mLabel + ": " + mCurrentText; -            mCurrentNotification.icon = iconResource; -            mCurrentNotification.setLatestEventInfo(mContext, mCurrentTitle, mCurrentText, -                    mContentIntent); -            if (ongoingEvent) { -                mCurrentNotification.flags |= Notification.FLAG_ONGOING_EVENT; -            } else { -                mCurrentNotification.flags &= ~Notification.FLAG_ONGOING_EVENT; -                mCurrentNotification.flags |= Notification.FLAG_AUTO_CANCEL; -            } -            mNotificationManager.notify(NOTIFICATION_ID, mCurrentNotification); +            mCurrentNotificationBuilder.setTicker(mLabel + ": " + mCurrentText); +            mCurrentNotificationBuilder.setSmallIcon(iconResource); +            mCurrentNotificationBuilder.setContentTitle(mCurrentTitle); +            mCurrentNotificationBuilder.setContentText(mCurrentText); +            mCurrentNotificationBuilder.setContentIntent(mContentIntent); +            mCurrentNotificationBuilder.setOngoing(ongoingEvent); +            mCurrentNotificationBuilder.setAutoCancel(!ongoingEvent); +            mNotificationManager.notify(NOTIFICATION_ID, mCurrentNotificationBuilder.build());          }      } @@ -154,10 +153,12 @@ public class DownloadNotification implements IDownloaderClient {          }          if (progress.mOverallTotal <= 0) {              // we just show the text -            mNotification.tickerText = mCurrentTitle; -            mNotification.icon = android.R.drawable.stat_sys_download; -            mNotification.setLatestEventInfo(mContext, mLabel, mCurrentText, mContentIntent); -            mCurrentNotification = mNotification; +            mNotificationBuilder.setTicker(mCurrentTitle); +            mNotificationBuilder.setSmallIcon(android.R.drawable.stat_sys_download); +            mNotificationBuilder.setContentTitle(mCurrentTitle); +            mNotificationBuilder.setContentText(mCurrentText); +            mNotificationBuilder.setContentIntent(mContentIntent); +            mCurrentNotificationBuilder = mNotificationBuilder;          } else {              mCustomNotification.setCurrentBytes(progress.mOverallProgress);              mCustomNotification.setTotalBytes(progress.mOverallTotal); @@ -166,9 +167,9 @@ public class DownloadNotification implements IDownloaderClient {              mCustomNotification.setTicker(mLabel + ": " + mCurrentText);              mCustomNotification.setTitle(mLabel);              mCustomNotification.setTimeRemaining(progress.mTimeRemaining); -            mCurrentNotification = mCustomNotification.updateNotification(mContext); +            mCurrentNotificationBuilder = mCustomNotification.updateNotification(mContext);          } -        mNotificationManager.notify(NOTIFICATION_ID, mCurrentNotification); +        mNotificationManager.notify(NOTIFICATION_ID, mCurrentNotificationBuilder.build());      }      public interface ICustomNotification { @@ -186,7 +187,7 @@ public class DownloadNotification implements IDownloaderClient {          void setTimeRemaining(long timeRemaining); -        Notification updateNotification(Context c); +        NotificationCompat.Builder updateNotification(Context c);      }      /** @@ -219,8 +220,8 @@ public class DownloadNotification implements IDownloaderClient {                  mContext.getSystemService(Context.NOTIFICATION_SERVICE);          mCustomNotification = CustomNotificationFactory                  .createCustomNotification(); -        mNotification = new Notification(); -        mCurrentNotification = mNotification; +        mNotificationBuilder = new NotificationCompat.Builder(ctx); +        mCurrentNotificationBuilder = mNotificationBuilder;      } diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/V14CustomNotification.java b/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/V14CustomNotification.java index 2e049a4d47..390bde96e9 100644 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/V14CustomNotification.java +++ b/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/V14CustomNotification.java @@ -22,6 +22,7 @@ import com.google.android.vending.expansion.downloader.Helpers;  import android.app.Notification;  import android.app.PendingIntent;  import android.content.Context; +import android.support.v4.app.NotificationCompat;  public class V14CustomNotification implements DownloadNotification.ICustomNotification { @@ -53,13 +54,14 @@ public class V14CustomNotification implements DownloadNotification.ICustomNotifi          mCurrentKB = currentBytes;      } -    void setProgress(Notification.Builder builder) { +    void setProgress(NotificationCompat.Builder builder) {      }      @Override -    public Notification updateNotification(Context c) { -        Notification.Builder builder = new Notification.Builder(c); +    public NotificationCompat.Builder updateNotification(Context c) { +        // NotificationCompat.Builder is used to support API < 16. This can be changed to Notification.Builder if minimum API >= 16. +        NotificationCompat.Builder builder = new NotificationCompat.Builder(c);          builder.setContentTitle(mTitle);          if (mTotalKB > 0 && -1 != mCurrentKB) {              builder.setProgress((int) (mTotalKB >> 8), (int) (mCurrentKB >> 8), false); @@ -80,7 +82,7 @@ public class V14CustomNotification implements DownloadNotification.ICustomNotifi          builder.setContentIntent(mPendingIntent);          builder.setOnlyAlertOnce(true); -        return builder.getNotification(); +        return builder;      }      @Override diff --git a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/V3CustomNotification.java b/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/V3CustomNotification.java deleted file mode 100644 index 94e21de7ca..0000000000 --- a/platform/android/java/src/com/google/android/vending/expansion/downloader/impl/V3CustomNotification.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * 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.google.android.vending.expansion.downloader.impl; - -import com.godot.game.R; -import com.google.android.vending.expansion.downloader.Helpers; - -import android.app.Notification; -import android.app.PendingIntent; -import android.content.Context; -import android.graphics.BitmapFactory; -import android.view.View; -import android.widget.RemoteViews; - -public class V3CustomNotification implements DownloadNotification.ICustomNotification { - -    CharSequence mTitle; -    CharSequence mTicker; -    int mIcon; -    long mTotalBytes = -1; -    long mCurrentBytes = -1; -    long mTimeRemaining; -    PendingIntent mPendingIntent; -    Notification mNotification = new Notification(); - -    @Override -    public void setIcon(int icon) { -        mIcon = icon; -    } - -    @Override -    public void setTitle(CharSequence title) { -        mTitle = title; -    } - -    @Override -    public void setTotalBytes(long totalBytes) { -        mTotalBytes = totalBytes; -    } - -    @Override -    public void setCurrentBytes(long currentBytes) { -        mCurrentBytes = currentBytes; -    } - -    @Override -    public Notification updateNotification(Context c) { -        Notification n = mNotification; - -        n.icon = mIcon; - -        n.flags |= Notification.FLAG_ONGOING_EVENT; - -        if (android.os.Build.VERSION.SDK_INT > 10) { -            n.flags |= Notification.FLAG_ONLY_ALERT_ONCE; // only matters for -                                                          // Honeycomb -        } - -        // Build the RemoteView object -        RemoteViews expandedView = new RemoteViews( -                c.getPackageName(), -                R.layout.status_bar_ongoing_event_progress_bar); - -        expandedView.setTextViewText(R.id.title, mTitle); -        // look at strings -        expandedView.setViewVisibility(R.id.description, View.VISIBLE); -        expandedView.setTextViewText(R.id.description, -                Helpers.getDownloadProgressString(mCurrentBytes, mTotalBytes)); -        expandedView.setViewVisibility(R.id.progress_bar_frame, View.VISIBLE); -        expandedView.setProgressBar(R.id.progress_bar, -                (int) (mTotalBytes >> 8), -                (int) (mCurrentBytes >> 8), -                mTotalBytes <= 0); -        expandedView.setViewVisibility(R.id.time_remaining, View.VISIBLE); -        expandedView.setTextViewText( -                R.id.time_remaining, -                c.getString(R.string.time_remaining_notification, -                        Helpers.getTimeRemaining(mTimeRemaining))); -        expandedView.setTextViewText(R.id.progress_text, -                Helpers.getDownloadProgressPercent(mCurrentBytes, mTotalBytes)); -        expandedView.setImageViewResource(R.id.appIcon, mIcon); -        n.contentView = expandedView; -        n.contentIntent = mPendingIntent; -        return n; -    } - -    @Override -    public void setPendingIntent(PendingIntent contentIntent) { -        mPendingIntent = contentIntent; -    } - -    @Override -    public void setTicker(CharSequence ticker) { -        mTicker = ticker; -    } - -    @Override -    public void setTimeRemaining(long timeRemaining) { -        mTimeRemaining = timeRemaining; -    } - -} diff --git a/platform/android/java/src/org/godotengine/godot/Godot.java b/platform/android/java/src/org/godotengine/godot/Godot.java index c4ba2da751..73d54b6afa 100644 --- a/platform/android/java/src/org/godotengine/godot/Godot.java +++ b/platform/android/java/src/org/godotengine/godot/Godot.java @@ -467,7 +467,7 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  				// Build the full path to the app's expansion files  				try { -					expansion_pack_path = Environment.getExternalStorageDirectory().toString() + "/Android/obb/"+this.getPackageName(); +					expansion_pack_path = Helpers.getSaveFilePath(getApplicationContext());  					expansion_pack_path+="/"+"main."+getPackageManager().getPackageInfo(getPackageName(), 0).versionCode+"."+this.getPackageName()+".obb";  				} catch (Exception e) {  					e.printStackTrace();  |